PHP - foreach循环 - $ arr和& $ value作为相同的变量

时间:2013-08-01 17:26:59

标签: php foreach

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

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

3 个答案:

答案 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循环,因为它循环遍历数组的元素,在这种情况下,直接修改它们(因为你正在使用引用)。