1、foreachは、arrayに対するphpのloop出力です。
例:
$arr = array("1"=>"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value) { echo $key."=>".$value."\n"; }
結果は次のとおりです:
1=>111 2=>222 3=>333
2、わずかに変更:
foreach($arr as $key=>$value) { //echo $key."=>".$value."\n"; $key = &$arr[$key]; } print_r($arr);
結果は次のとおりです:
Array ( [1] => 2 [2] => 3 [3] => 333 )
コードの説明:
元の配列が変更されていることがわかりました。なぜですか?勉強しましょう。
コードの重要な部分は次のとおりです: $key = &$arr[$key];
$key は $arr[$key] の 参照、つまり $key が変更されると、$arr[ $key] も対応する値に変更されます。
まず第一に、配列の値をそれぞれ $key と $value に割り当てる foreach の原理を理解する必要があります。
つまり、$key と $value も通常の変数です。
次の分析では、最初のループで $key = &$arr[$key]; は &$arr[1] が変数 $key を指していることを意味します。
foreach ループが 2 回目のパスに到達すると、まず、$key に値 2 が割り当てられます。このとき、もう一度注意してください、$key = &$arr[$key];
結果は次のようになります: $arr[ 1] に値が割り当てられます。これがこの時点での新しい $key であり、2 です。
2 番目のループの後、元の配列は次のようになります:
Array ( [1] => 2 [2] => 222 [3] => 333 )
同様に、3 番目のループの後、それは次のようになります:
Array ( [1] => 2 [2] => 3 [3] => 333 )
ここで、大まかに説明してきました。
3. foreach での割り当てプロセスをより明確に理解するために、次のようにすることができます:
$arr = array("1"=>"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value) { $key = &$arr[$key]; $key = "hello"; unset($key); print_r($arr); }
結果は次のようになります:
Array ( [1] => hello [2] => 222 [3] => 333 ) Array ( [1] => hello [2] => hello [3] => 333 ) Array ( [1] => hello [2] => hello [3] => hello )
コードの説明:
$key の値を "hello" に直接割り当てます。 " 各ループに影響を与えないようにするには、$key 変数を解放します。
これにより、より明確になるはずです。
以上がPHP での foreach 参照から生じる問題の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。