$arr = array(1);
$a = & $arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0],$arr2[0];
// Output 2,2
¿Puede ayudarme por favor cómo es posible?Confusión de referencia de matrices en PHP
$arr = array(1);
$a = & $arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0],$arr2[0];
// Output 2,2
¿Puede ayudarme por favor cómo es posible?Confusión de referencia de matrices en PHP
Tenga en cuenta, sin embargo, que las referencias dentro de las matrices son potencialmente peligrosas. Hacer una asignación normal (no por referencia) con una referencia en el lado derecho no convierte el lado izquierdo en una referencia , pero las referencias dentro de las matrices se conservan en estas asignaciones normales . Esto también se aplica a llamadas de función donde la matriz es pasada por valor.
/* Assignment of array variables */
$arr = array(1);
$a =& $arr[0]; //$a and $arr[0] are in the same reference set
$arr2 = $arr; //not an assignment-by-reference!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* The contents of $arr are changed even though it's not a reference! */
Nunca lo sabía. +1 – Sherlock
RTFM FTW! :-D +1 – DaveRandom
@DaveRandom Por favor, abreviar RTFM FTW. Me temo que lo estoy tomando de la manera incorrecta;) –
Parece $ arr [0] y $ arr2 [0] apuntan a la misma memoria asignada, por lo que si incrementas en uno de los punteros, el int se incrementan en la memoria
Enlace Are there pointers in php?
La pregunta es ¿por qué? Apunta a la misma memoria asignada. – Sherlock
no lo he leído pero, $ arr2 = $ arr; parece no copiar $ arr pero solo para crear un nuevo puntero como en C – Dukeatcoding
$arr = array(1);//creates an Array ([0] => 1) and assigns it to $arr
$a = & $arr[0];//assigns by reference $arr[0] to $a and thus $a is a reference of $arr[0].
//Here $arr[0] is also replaced with the reference to the actual value i.e. 1
$arr2 = $arr;//assigns $arr to $arr2
$arr2[0]++;//increments the referenced value by one
echo $arr[0],$arr2[0];//As both $aar[0] and $arr2[0] are referencing the same block of memory so both echo 2
// Output 22
desea que le explicamos cómo funciona? – Wearybands
él solo incrementa en arr2 y quiere saber por qué arr también es el incremento – Dukeatcoding
Quiere decir que este comportamiento es peculiar ya que establece $ a como referencia a $ arr pero nunca usa $ a. Esto de hecho es extraño. – Sherlock