CakeFest 2024: The Official CakePHP Conference

ArrayObject::getArrayCopy

(PHP 5, PHP 7, PHP 8)

ArrayObject::getArrayCopyCrea una copia de la clase ArrayObject

Descripción

public ArrayObject::getArrayCopy(): array

Exporta la clase ArrayObject a un array.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve una copia del array. Cuando la clase ArrayObject hace referencia a un objeto, un array de las propiedades públicas del objeto que será devuelto.

Ejemplos

Ejemplo #1 ArrayObject::getArrayCopy() example

<?php
// Array de frutas
$fruits = array("limones" => 1, "naranjas" => 4, "bananas" => 5, "manzanas" => 10);

$fruitsArrayObject = new ArrayObject($fruits);
$fruitsArrayObject['peras'] = 4;

// crear una copia del array
$copy = $fruitsArrayObject->getArrayCopy();
print_r($copy);

?>

El resultado del ejemplo sería:

Array
(
    [limones] => 1
    [naranjas] => 4
    [bananas] => 5
    [manzanas] => 10
    [peras] => 4
)

add a note

User Contributed Notes 5 notes

up
4
spidgorny at gmail dot com
7 years ago
<?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.
up
5
Ivo von Putzer
12 years ago
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!
up
1
php at webflips dot net
9 years ago
"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.
up
1
jlshor at buffalo dot edu
7 years ago
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?
up
0
sorcerer
7 years ago
When I used print_r ($fruitsArrayObject) instead of print_r ($copy), i.e. ignoring the getArrayCopy() step, I still got the same output. Why?
To Top