note 48730 modified in language.types.array by nforbes

From: Date: Fri, 18 Aug 2006 21:51:19 +0000
Subject: note 48730 modified in language.types.array by nforbes
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-116045@lists.php.net to get a copy of this message
[Editor's Note: (Second example.) These are not "arrays in arrays". These are single-dimensional arrays containing stdClass objects; all objects are referenced by default in PHP5. You can see in the var_dump output that they point to the same object.] Attention with Arrays in Arrays! If you copy (=) an array which contains arrays it will be REFERENCED not COPIED. Example: <?php /* GOOD ONE */ echo "<b>Here copy (=) works correct:</b><br>"; /* Initialise Array 1 */ $x1 = array(array(10,20),array(30,40)); /* COPY Array */ $x2 = $x1; /* Change some values in Array 2 */ $x2[0][0]=77; $x2[1][1]=99; echo "<b>Original:</b><pre>"; var_dump($x1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($x2); /* BAAAAAAAD ONE */ echo "</pre><hr><b>Here copy (=) FAILS:</b><br>"; /* Initialise Array 1 */ $a1[0]->bla[0]->id=10; $a1[0]->bla[1]->id=20; $a1[1]->bla[0]->id=30; $a1[1]->bla[1]->id=40; /* COPY Array */ $a2 = $a1; /* Change some values in Array 2 (!) */ $a2[0]->bla[0]->id=77; $a2[1]->bla[1]->id=99; echo "<b>Original:</b><pre>"; var_dump($a1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($a2); echo "</pre>"; php?> The output of $a1 and $a2 will be the same.. --was-- Attention with Arrays in Arrays! If you copy (=) an array which contains arrays it will be REFERENCED not COPIED. Example: <?php /* GOOD ONE */ echo "<b>Here copy (=) works correct:</b><br>"; /* Initialise Array 1 */ $x1 = array(array(10,20),array(30,40)); /* COPY Array */ $x2 = $x1; /* Change some values in Array 2 */ $x2[0][0]=77; $x2[1][1]=99; echo "<b>Original:</b><pre>"; var_dump($x1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($x2); /* BAAAAAAAD ONE */ echo "</pre><hr><b>Here copy (=) FAILS:</b><br>"; /* Initialise Array 1 */ $a1[0]->bla[0]->id=10; $a1[0]->bla[1]->id=20; $a1[1]->bla[0]->id=30; $a1[1]->bla[1]->id=40; /* COPY Array */ $a2 = $a1; /* Change some values in Array 2 (!) */ $a2[0]->bla[0]->id=77; $a2[1]->bla[1]->id=99; echo "<b>Original:</b><pre>"; var_dump($a1); echo "</pre><b>Changed Copy:</b><pre>"; var_dump($a2); echo "</pre>"; php?> The output of $a1 and $a2 will be the same.. http://php.net/manual/en/language.types.array.php

« previous php.notes (#116045) next »