ArrayObject::getArrayCopy
(PHP 5 >= 5.0.0)
ArrayObject::getArrayCopy — Creates a copy of the ArrayObject.
Parameters
This function has no parameters.
Return Values
Returns a copy of the array. When the ArrayObject refers to an object an array of the public properties of that object will be returned.
Examples
Example #1 ArrayObject::getArrayCopy() example
<?php
// Array of available fruits
$fruits = array("lemons" => 1, "oranges" => 4, "bananas" => 5, "apples" => 10);
$fruitsArrayObject = new ArrayObject($fruits);
$fruitsArrayObject['pears'] = 4;
// create a copy of the array
$copy = $fruitsArrayObject->getArrayCopy();
print_r($copy);
?>
The above example will output:
Array ( [lemons] => 1 [oranges] => 4 [bananas] => 5 [apples] => 10 [pears] => 4 )
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Различные Классы и Интерфейсы
- Функция ArrayObject::append() - Добавляет значение в конец массива
- Функция ArrayObject::asort() - Сортирует записи по значению
- Функция ArrayObject::__construct() - Создает новый объект типа массив
- Функция ArrayObject::count() - Возвращает количество публичных свойств ArrayObject
- Функция ArrayObject::exchangeArray() - Заменяет текущий массив на другой
- Функция ArrayObject::getArrayCopy() - Создаёт копию ArrayObject
- Функция ArrayObject::getFlags() - Получает флаги поведения
- Функция ArrayObject::getIterator() - Создаёт новый итератор из экземпляра ArrayObject
- Функция ArrayObject::getIteratorClass() - Возвращает имя класса итератора для ArrayObject
- Функция ArrayObject::ksort() - Сортирует записи по ключам
- Функция ArrayObject::natcasesort() - Сортирует массив, используя регистронезависимый алгоритм "natural order"
- Функция ArrayObject::natsort() - Сортирует массив, используя алгоритм "natural order"
- Функция ArrayObject::offsetExists() - Проверяет, существует ли указанный индекс
- Функция ArrayObject::offsetGet() - Возвращает значение по указанному индексу
- Функция ArrayObject::offsetSet() - Установливает новое значение по указанному индексу
- Функция ArrayObject::offsetUnset() - Удаляет значение по указанному индексу
- Функция ArrayObject::serialize() - Сериализует ArrayObject
- Функция ArrayObject::setFlags() - Устанавливает флаги поведения
- Функция ArrayObject::setIteratorClass() - Устанавливает имя класса итератора для ArrayObject
- Функция ArrayObject::uasort() - Сортирует записи, используя пользовательскую функцию для сравнения элементов и сохраняя при этом связь ключ/значение
- Функция ArrayObject::uksort() - Сортирует массив по ключам, используя пользовательскую функцию для сравнения
- Функция ArrayObject::unserialize() - Десериализует ArrayObject
Коментарии
If you did something like this to make your constructor multidimensional capable you will have some trouble using getArrayCopy to get a plain array straight out of the method:
<?php
public function __construct( $array = array(), $flags = 2 )
{
// let’s give the objects the right and not the inherited name
$class = get_class($this);
foreach($array as $offset => $value)
$this->offsetSet($offset, is_array($value) ? new $class($value) : $value);
$this->setFlags($flags);
}
?>
That’s the way I solved it:
<?php
public function getArray($recursion = false)
{
// just in case the object might be multidimensional
if ( $this === true)
return $this->getArrayCopy();
return array_map( function($item){
return is_object($item) ? $item->getArray(true) : $item;
}, $this->getArrayCopy() );
}
?>
Hope this was useful!
"When the ArrayObject refers to an object an array of the public properties of that object will be returned."
This description does not seem to be right:
<?php
class A
{
public $var = 'var';
protected $foo = 'foo';
private $bar = 'bar';
}
$o = new ArrayObject(new A());
var_dump($o->getArrayCopy());
/*
Dumps:
array(3) {
["var"]=>
string(3) "var"
["*foo"]=>
string(3) "foo"
["Abar"]=>
string(3) "bar"
}
*/
?>
So it does not only include the public properties.
Is there a difference between casting to an array and using this function?
For instance, if we have:
$arrayObject = new ArrayObject([1, 2, 3]);
Is there a difference between these:
$array = (array) $arrayObject;
vs
$array = $arrayObject->getArrayCopy();
If not, is there any scenario where they would produce different results, or do they produce the result in different ways?
<?php
$data = $likeArray->getArrayCopy();
?>
will NOT be magically called if you cast to array. Although I've expected it.
<?php
$nothing = (array)$likeArray;
?>
Here, $data != $nothing.
When I used print_r ($fruitsArrayObject) instead of print_r ($copy), i.e. ignoring the getArrayCopy() step, I still got the same output. Why?