私は長年 PHP を書いてきましたが、今でも愚かな間違いを犯しています。PHP のバージョンは 5.6.12 です。
<?php $arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
出力結果
。
が与えられ続けます。
具体的な代入状況、初回: a_a が 5 番目の要素に代入され、結果は次のようになります: [a_a, b_b, c_c, d_d,a_a] 2 回目: b_b が 5 番目の要素に代入、その結果は: [a_a, b_b, c_c, d_d,b_b] 3 回目: c_c が 5 番目の要素に代入され、結果は次のようになります: [a_a, b_b, c_c, d_d,c_c] 4 回目: d_d はassign 5 番目の要素を与えると、結果は [a_a, b_b, c_c, d_d,d_d] になります 5 回目: このとき、5 番目の要素は d_d になっているので、5 番目の要素に d_d が代入され、結果はは同じです: [a_a, b_b, c_c, d_d,d_d]解決策:1. 同じループ変数名を使用しないようにしてください。2. 使用するたびに、またはその前に unset($a) を実行します。再度使用します。アドレス アプリケーションを処理して解放するには、引き続き上記のコード例を使用します。$arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'<br>'; } echo '<hr>'; echo $a; echo '<hr>'; // 这里 unset 掉 unset($a); echo $a = 'ccc'; echo '<hr>'; print_r($arr); echo '<hr>'; foreach ($arr as $i=>$a) { echo $a .'<br>'; } echo '<hr>'; print_r($arr);
これで、これらの細かい点に注意する必要があります。上記は概要です。編集者が皆さんにお届けする PHP のディスカッション foreach での参照変数の使用の落とし穴に関するすべてのコンテンツはここにあります。皆さんが PHP の中国語 Web サイトをサポートしてくれることを願っています~
PHP の foreach での参照変数の使用の落とし穴に関するその他の記事については、こちらをご覧ください。 、PHP 中国語 Web サイトに注意してください。