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.0.0)
ArrayObject::getArrayCopy — Crée une copie de l'objet ArrayObject
Description
public array ArrayObject::getArrayCopy
( void
)
Exporte l'objet ArrayObject vers un tableau.
Liste de paramètres
Cette fonction ne contient aucun paramètre.
Valeurs de retour
Retourne une copie du tableau. Lorsque l'objet ArrayObject est un objet, le tableau retourné contient les propriétés publiques de cet objet.
Exemples
Exemple #1 Exemple avec ArrayObject::getArrayCopy()
<?php
// Liste de fruits
$fruits = array("citrons" => 1, "oranges" => 4, "bananes" => 5, "pommes" => 10);
$fruitsArrayObject = new ArrayObject($fruits);
$fruitsArrayObject['poires'] = 4;
// Crée un copie des tableaux
$copy = $fruitsArrayObject->getArrayCopy();
print_r($copy);
?>
L'exemple ci-dessus va afficher :
Array
(
[citrons] => 1
[oranges] => 4
[bananes] => 5
[pommes] => 10
[poires] => 4
)
Ivo von Putzer
05-Dec-2011 05:06
