PHP自相矛盾(怪异)的行为。通过引用将数组发送到函数
有人能给我解释一下,为什么这段代码在不破坏初始数组结构的情况下正常工作PHP自相矛盾(怪异)的行为。通过引用将数组发送到函数,php,arrays,pass-by-reference,Php,Arrays,Pass By Reference,有人能给我解释一下,为什么这段代码在不破坏初始数组结构的情况下正常工作 function setArrayValueByPath($path, $value, &$array) { foreach ($path as $p) { $array = &$array[$p]; } $array = $value; return true; } $array = [ 'a' => 'v1', 'b' => '
function setArrayValueByPath($path, $value, &$array)
{
foreach ($path as $p) {
$array = &$array[$p];
}
$array = $value;
return true;
}
$array = [
'a' => 'v1',
'b' => 'v2',
];
setArrayValueByPath(['hello', 'world'], '!!!', $array);
echo '<pre>';
print_r($array);
echo '</pre>';
由于线路的功能:
foreach ($path as $p) {
它应该替换$array值,但不会发生
我的函数基于以下代码段:
谢谢。让我们一步一步地检查一下 参数
$array
是函数中的一个局部变量,它包含对传入的某个外部数组的引用
$array = &$array[$p];
这将在['hello','world']
}
获取原始数组,并使用$p
(即[hello])对其进行“索引”。该数组当前不存在,因此将其添加到原始数组中。然后引用该新成员并将其保存在局部变量$array
中。也就是说,您刚刚创建了原始数组的一个新成员,而局部变量$array
不再指向原始外部数组
在第二次迭代中,获取当前由$array
(见上文)指向的变量,并使用$p
(world
)对其进行索引。这不存在,所以创建它
$array = $value;
此时,$array
指向成员{original array}[hello][world]
。我在这里使用语法{original array}
,因为您不再有对它的引用,只有对嵌套在其中的两级数组的引用
这将该成员的值设置为代码>,提供您所看到的数据结构。尽管on-SO要求避免在评论中使用“谢谢”,但我仍然在此感谢您,先生。好。。现在看起来很清楚,但我是否正确使用不同名称的变量使代码更易于理解要好得多?
}
$array = $value;