foreach($foo as &$bar) {
//do something
}
这是PHP中foreach循环的语法。通常,$foo
& $bar
是不同的变量,但我的问题是它们可以是同一个变量吗?我问PHP是否会让我,而不是是否有可能编写这样的代码。我知道这会修改循环中的变量,我并不担心。
答案 0 :(得分:3)
它会起作用,ONCE,但只是因为PHP中的怪癖:
php > $x = array(1,2,3);
php > foreach($x as $x) { echo $x; }
123
php > var_dump($x);
int(3)
请注意,循环实际上是针对原始$x
数组的所有3个值运行的,但是在循环退出后,$x
现在只是一个int - 它不再是一个数组。
如果as $x
是直接的$ x变量或&$x
引用,则会出现这种情况。
答案 1 :(得分:2)
是的,它有效。当foreach
循环开始时,它会生成数组内容的快照。然后将迭代变量连续分配给该快照的元素。
$foo = array(1, 2, 3);
foreach ($foo as &$foo) {
echo "foreach: $foo\n";
}
echo "vardump: ";
var_dump($foo);
输出:
foreach: 1
foreach: 2
foreach: 3
vardump: int(3)
答案 2 :(得分:0)
不,它们不能是同一个变量; $foo
将是一个数组,&$bar
将是对该数组元素的引用。这就是为什么它被称为 for-each循环,因为它循环遍历数组的元素,在这种情况下,直接修改它们(因为你正在使用引用)。