PHP 8.5.0 RC 2 available for testing

ArrayObject::getArrayCopy

(PHP 5, PHP 7, PHP 8)

ArrayObject::getArrayCopyCrea una copia del objeto ArrayObject

Descripción

public ArrayObject::getArrayCopy(): array

Exporta el objeto ArrayObject a un array.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve una copia del array. Cuando el objeto ArrayObject es un objeto, el array devuelto contiene las propiedades de dicho objeto.

Ejemplos

Ejemplo #1 Ejemplo con ArrayObject::getArrayCopy()

<?php
// Lista de frutas
$fruits = array("limones" => 1, "naranjas" => 4, "plátanos" => 5, "manzanas" => 10);

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

// Crea una copia de los arrays
$copy = $fruitsArrayObject->getArrayCopy();
var_dump($copy);

?>

El ejemplo anterior mostrará :

array(5) {
  ["limones"]=>
  int(1)
  ["naranjas"]=>
  int(4)
  ["plátanos"]=>
  int(5)
  ["manzanas"]=>
  int(10)
  ["peras"]=>
  int(4)
}

add a note

User Contributed Notes 5 notes

up
3
jlshor at buffalo dot edu
8 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
3
Ivo von Putzer
13 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:<?phppublic 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:<?phppublic 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
spidgorny at gmail dot com
8 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
0
sorcerer
8 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?
up
0
php at webflips dot net
11 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:<?phpclass 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.
To Top