2
foreach($foo as &$bar) {
  //do something
}

这是 PHP 中 foreach 循环的语法。通常,$foo&$bar是不同的变量,但我的问题是它们可以是同一个变量吗?我问的是 PHP 是否会让我,而不是是否可以编写这样的代码。我知道这会修改循环内的变量,我并不担心。

4

3 回答 3

3

它会工作,一次,但只是因为 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引用,则适用。

于 2013-08-01T17:40:56.197 回答
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)
于 2013-08-01T17:42:15.290 回答
0

不,它们不能是同一个变量;$foo将是一个数组,并且&$bar是对该数组元素的引用。这就是为什么它被称为for-each 循环,因为它循环遍历数组的元素,在这种情况下,直接修改它们(因为您正在使用引用)。

于 2013-08-01T17:35:23.823 回答