2012-02-02 14 views
2

可能性の重複:
Strange behavior Of foreachforeachの変更最後の要素

なぜPHPは時々、配列の最後の要素を変更しますか?

は、私は配列を持っている:

Array 
(
    [0] => a_ 
    [1] => b_ 
    [2] => c_ 
    [3] => d_ 
) 

私はすべてのemenetsをプリントアウトしてみてください

。そして、出力は次のようになります。

a_ 
b_ 
c_ 
c_ 

完全なコードは次のとおりです。

<? 
$a = array('a', 'b', 'c', 'd'); 

foreach ($a as &$value) 
    $value = "{$value}_"; 

print_r($a); 

foreach ($a as $value) { 
    echo "$value\n"; 
} 

なぜ?

答えて

9

どちらかあなたの第二のループまたは未設定$値に別の変数名を使用してあなたの最初のものがこの問題を解決した後。

$a = array('a', 'b', 'c', 'd'); 

foreach ($a as &$value) { 
    $value = "{$value}_"; 
} 

unset($value); 

print_r($a); 

foreach ($a as $value) { 
    echo "$value\n"; 
} 
+0

これはEXTREMEMLY役立ちました!私は困惑した。ありがとうございました! –

1

PHPがあなたの例では、ポインタのアドレスを台無しに次のようになります。

あなたはこのようにそれを書き込むことができません:

<?php 

    $a = array('a', 'b', 'c', 'd'); 

    for ($i = 0; $i < count($a); $i++) 
     $a[$i] = "{$a[$i]}_"; 

    print_r($a); 

    foreach ($a as $value) { 
     echo "$value\n"; 
    } 

?> 
+3

が既にhttp://php.net/manual/en/control-structures.foreach.php – ariefbayu

+0

@silentで説明:リンクの1 :) –

関連する問題