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!
ArrayObject::getArrayCopy
(PHP 5 >= 5.1.0)
ArrayObject::getArrayCopy — Creates a copy of the ArrayObject.
Параметри
Тази функция няма параметри.
Връщани стойности
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.
Примери
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);
?>
Примерът по-горе ще изведе:
Array
(
[lemons] => 1
[oranges] => 4
[bananas] => 5
[apples] => 10
[pears] => 4
)
Ivo von Putzer
04-Dec-2011 10:06
