foreach($foo as &$bar) {
//do something
}
这是 PHP 中 foreach 循环的语法。通常,$foo
&$bar
是不同的变量,但我的问题是它们可以是同一个变量吗?我问的是 PHP 是否会让我,而不是是否可以编写这样的代码。我知道这会修改循环内的变量,我并不担心。
它会工作,一次,但只是因为 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
引用,则适用。
是的,它有效。当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)
不,它们不能是同一个变量;$foo
将是一个数组,并且&$bar
是对该数组元素的引用。这就是为什么它被称为for-each 循环,因为它循环遍历数组的元素,在这种情况下,直接修改它们(因为您正在使用引用)。