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
)

??? 2番目のループ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"
}

2番目と3番目の[1]と[2]のインデックスは同じ「reaLmail」であり、[2]はポインタですか?ありがとうございました!

4

2 に答える 2

1

を使用する場合foreach (... as &..)unset、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 に答える