©
本文档使用 PHP中文网手册 发布
(PHP 5 >= 5.0.0)
ArrayObject::getArrayCopy — Creates a copy of the ArrayObject.
Exports the ArrayObject to an array.
此函数没有参数。
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 )
[#1] php at webflips dot net [2014-05-24 07:42:31]
"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());
?>
So it does not only include the public properties.
[#2] Ivo von Putzer [2011-12-05 05:06:11]
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!