This extend allows multidimensional arrays to be converted aswell. It also returns 'Array' when echoed (unlike ArrayObject which gives an error).
<?php
/**
* @author iltar van der berg
* @version 1.0.1
*/
class RecursiveArrayObject extends ArrayObject
{
/**
* overwrites the ArrayObject constructor for
* iteration through the "array". When the item
* is an array, it creates another self() instead
* of an array
*
* @param Array $array data array
*/
public function __construct(Array $array)
{
foreach($array as $key => $value) {
if(is_array($value)){
$value = new self($value);
}
$this->offsetSet($key, $value);
}
}
/**
* returns Array when printed (like "echo array();")
* instead of an error
*
* @return string
*/
public function __ToString()
{
return 'Array';
}
}
?>
ArrayObject::__construct
(PHP 5)
ArrayObject::__construct — Construit un nouvel objet tableau
Liste de paramètres
- input
-
Le paramètre input accepte un tableau ou un autre objet ArrayObject.
Valeurs de retour
Aucune valeur n'est retournée.
Exemples
Exemple #1 Exemple avec ArrayObject::__construct()
<?php
$array = array('1' => 'one',
'2' => 'two',
'3' => 'three');
$arrayobject = new ArrayObject($array);
var_dump($arrayobject);
?>
L'exemple ci-dessus va afficher :
object(ArrayObject)#1 (3) { [1]=> string(3) "one" [2]=> string(3) "two" [3]=> string(5) "three" }
ArrayObject::__construct
kjarli at gmail dot com
03-Jul-2008 12:11
03-Jul-2008 12:11
german dot rumm at gmail dot com
14-Mar-2008 07:37
14-Mar-2008 07:37
BTW, if you need to change array later, use exchangeArray() method. Good to know when you are writing a class that extends ArrayObject()
AFAIK, exchangeArray() doesn't return anything.
<?php
$a = array('one', 'two', 'three');
$ao = new ArrayObject($a);
foreach ($ao as $element) {
echo $element . ' '; // one two three
}
$b = array('four', 'five', 'six');
$ao->exchangeArray($b); // returns null
foreach ($ao as $element) {
echo $element . ' '; // four five six
}
?>
agalkin at agalkin dot ru
21-Aug-2007 10:56
21-Aug-2007 10:56
Note that the first argument to ArrayObject::__construct, the initial array, is passed by reference. Nevertheless, modification of the array doesn't modify the object, so it may cause unexpected behaviour.
<?php
$array = array('foo' => 'initial');
$obj = new ArrayObject($array);
// array was passed by reference:
$obj['foo'] = 'modified';
var_dump($array); // foo => modified
// but it doesn't work backwards:
$array['foo'] = 'modified_again';
var_dump($obj); // foo => modified
var_dump($array); // foo => modified_again
?>
Grigori Kochanov
15-Jul-2006 12:51
15-Jul-2006 12:51
As Marcus explained, the flag ArrayObject::SPL_ARRAY_AS_PROPS means the array element may be used as a property if there is no conflict with visible properties.
If there are visible properties in the class, the array element will not overwrite it's value.
<?php
class Rules extends ArrayObject {
public $len = 1;
function __construct($array){
parent::__construct($array,ArrayObject::ARRAY_AS_PROPS);
$this['len'] = 2;
}
}
$x = new Rules(array(1,2));
echo $x->len;
?>
Result: 1
<?php
class Rules extends ArrayObject {
private $len = 1;
function __construct($array){
parent::__construct($array,ArrayObject::ARRAY_AS_PROPS);
$this['len'] = 2;
}
}
$x = new Rules(array(1,2));
echo $x->len;
?>
Result: 2
