1

可能重复:
foreach 的
奇怪行为 循环引用后的奇怪行为 - 这是 PHP 错误吗?

谁能解释一下为什么这段代码:

<pre>
<?php

$a = array('page', 'email', 'comment');
$b = array('page' => 'realpage', 'email' => 'reaLmail', 'comment' => 'c');
$c = array();

foreach ($a as &$item) {
        if (isset($b[$item])) {
               $item =  $b[$item];
        }
}


foreach ($a as $item) {
        $c[] = $item;
}

print_r($c);

输出

 Array
(
    [0] => realpage
    [1] => reaLmail
    [2] => reaLmail
)

???为什么在第二个循环 a 之前是(通过 var_dump)

array(3) {
  [0]=>
  string(8) "realpage"
  [1]=>
  string(8) "reaLmail"
  [2]=>
  &string(1) "c"
}

但在第一次迭代中,a 是

 array(3) {
  [0]=>
  string(8) "realpage"
  [1]=>
  string(8) "reaLmail"
  [2]=>
  &string(8) "realpage"
}

并且在第二个和第三个 [1] 和 [2] 索引上是相同的“realmail”,而 [2] 是指针?谢谢!

4

2 回答 2

1

如果您使用foreach (... as &..), thenunset是必需的,如 php 手册中所述:

foreach ($a as &$item) {
        if (isset($b[$item])) {
               $item =  $b[$item];
        }
}
unset($item);
于 2012-05-05T11:08:29.707 回答
0

您不需要&在第一个循环中,这使它成为一个参考。删除它,您的示例应该可以正常工作。

foreach ($a as &$item)
于 2012-05-05T11:05:44.437 回答