为什么引用数组元素在这种情况下不起作用


Why does Referencing to Array Elements not work in this situation?

此引用有效:

$awesome_array = array (1,2,3);
$cool_array = array (4,5,6);
$ref = &$awesome_array; // reference awesome_array
$awesome_array = $cool_array;
echo $ref; //produces (4,5,6) as expected

这种引用也有效:

$array[0] = "original";
$element_reference = &$array[0]; // reference $array[0]
$array[0] = "modified";
echo $element_reference; // returns "modified" as expected.

但是,当您更改整个数组时,引用数组中的元素是不起作用的。你是怎么解决的?

$array = array (1,2,3);
$new_array = array (4,5,6);
$element_reference = &$array[0]; // reference $array[0]
$array = $new_array; // CHANGE ENTIRE ARRAY
echo $element_reference; // returns 1 despite the fact that the entire array changed. I need it to return 4?

既然数组已经更改,为什么它不返回4?如何引用元素,使其返回4?

引用到数组中的元素,而不是到"一个名为$array的变量的索引"。因此,没有任何引用(针对旧数组中的元素)适用于新数组。

原始引用仍然引用原始数组及其元素;即使原始阵列不再可立即访问。

要引用解析为数组的变量的特定索引,只需使用正常的索引操作:

$array = array (1,2,3);
$new_array = array (4,5,6);
$i = 0;
echo $array[$i];     // -> 1
$array = $new_array; // reassign variable with new array
echo $array[$i];     // -> 4