// 示例1
function test(&$a) {
$a = &$a['a'];
$a = 2;
}
$a = ['a' => 'a1', 'b' => 'b1'];
test($a);
print_r($a);
/* 以上结果为:
array:2 [
"a" => 2
"b" => "b1"
]
*/
// 示例2
function test1(&$a) {
$a = $a['a'];
$a = 2;
}
$a = ['a' => 'a1', 'b' => 'b1'];
test1($a);
print_r($a);
/* 以上结果为:
2
*/
示例2可以理解,但示例1却很难理解,请大家指点。(类似的代码出现在laravel array_set函数里)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
$a 重新赋值,此时$a只是指向$a['a']在内存中的真实地址
此时$a只是指向$a['a']在内存中的真实地址,
而原来$a指定地址的数据仍存在,所以示例1中$a['a']的值是2,明白了,多谢