我刚刚注意到你无法处理foreach循环中的引用。拿这个代码示例:
$arr = array(1,2,3,4,5);
$foo = array();
foreach($arr as $a) {
$foo[] = &$a;
}
var_dump($foo);
令人惊讶的是,输出为array(5) { [0]=> &int(5) [1]=> &int(5) [2]=> &int(5) [3]=> &int(5) [4]=> &int(5) }
。
但是,我期待$arr
的副本。我只能一个
for($i = 0; $i < count($arr); $i++) {
$foo[] = &$arr[$i];
}
var_dump($foo);
输出:array(5) { [0]=> &int(1) [1]=> &int(2) [2]=> &int(3) [3]=> &int(4) [4]=> &int(5) }
为什么这种行为是可取的?
答案 0 :(得分:2)
临时变量$a
会更改每次迭代,直到它最终等于5,因此对它的引用为5.这将为您提供所需的行为:
foreach($arr as &$a) {
$foo[] = &$a;
}
这会将$a
引用到实际的数组值。