Ver Mensaje Individual
  #342 (permalink)  
Antiguo 09/05/2011, 22:11
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Juego: "¿Dónde está el error?"

Muy bien zerokilled, el primero es la mejor forma, para evitar problemas, tal vez la segunda puede presentar cosas inesperadas. Ahora para que veas el comportamiento,

Si hicieramos esto
Código PHP:
Ver original
  1. <?php
  2. $colors = array('red', 'blue', 'green', 'yellow');
  3.  
  4. foreach ($colors as &$color){}
  5.  
  6. var_dump($colors);
  7.  
  8. var_dump($GLOBALS);
Cada vez que se modifica $color se modifica el último valor del array.

Imprime algo así
Código PHP:
Ver original
  1. array(4) {
  2.   [0]=>
  3.   string(3) "red"
  4.   [1]=>
  5.   string(4) "blue"
  6.   [2]=>
  7.   string(5) "green"
  8.   [3]=>
  9.   &string(6) "yellow"
  10. }
  11. array(7) {
  12.   ["GLOBALS"]=>
  13.   *RECURSION*
  14.   ["_POST"]=>
  15.   array(0) {
  16.   }
  17.   ["_GET"]=>
  18.   array(0) {
  19.   }
  20.   ["_COOKIE"]=>
  21.   array(0) {
  22.   }
  23.   ["_FILES"]=>
  24.   array(0) {
  25.   }
  26.   ["colors"]=>
  27.   array(4) {
  28.     [0]=>
  29.     string(3) "red"
  30.     [1]=>
  31.     string(4) "blue"
  32.     [2]=>
  33.     string(5) "green"
  34.     [3]=>
  35.     &string(6) "yellow"
  36.   }
  37.   ["color"]=>
  38.   &string(6) "yellow"
  39. }
Si te fijas se creo una variable (así como en el global lo muestra) llamada $color que hace referencia al último array que tiene como valor yellow (lógicamente) este es una referencia. Ahora, cuando se ejecuta un segundo foreach, cada vez se modifica el valor $color y este modifica el último valor del array. Por eso queda como valor green, porque es el último valor indicado. Es decir el segundo array lo que hace es algo como
Código PHP:
Ver original
  1. array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "green" [3]=> &string(6) "yellow" }
  2.  
  3. $color = 'red';
  4. array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "green" [3]=> &string(6) "red" }
  5.  
  6. $color = 'blue';
  7. array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "green" [3]=> &string(6) "blue" }
  8.  
  9. $color = 'green';
  10. array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "green" [3]=> &string(6) "green" }
  11.  
  12. // lógicamente el último valor es
  13. $color = 'green';
  14. array(4) { [0]=> string(3) "red" [1]=> string(4) "blue" [2]=> string(5) "green" [3]=> &string(6) "green" }
Cada vez que se modifica $color se modifica el último valor del array.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 09/05/2011 a las 22:17