& (and 演算子) を使用した foreach ループの問題

伊谢尔伦
リリース: 2023-03-11 09:08:02
オリジナル
1877 人が閲覧しました

foreach $value の前に & を追加することで、array の単位を簡単に変更できます。 foreach で reference を使用する場合は注意してください。また、処理後すぐに参照関係を切断することで、後から上記のような事態が起こらないようにすることもできます。

foreach($arr as $value){ 
$value .= '4'; 
}
ログイン後にコピー

しかし、この使い方はエラーを引き起こしやすく、見つけるのも簡単ではありません。
例を見るとより簡単です:

<?php 
$arr = array(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;); 
$arr2 = array(&#39;d&#39;, &#39;e&#39;, &#39;f&#39;); 

foreach($arr as $value){//习惯用$value或$val 
$value .= &#39;4&#39;; 
} 

//都处理完毕我们在页面模版输出,首先输出$arr2 
foreach($arr2 as $value){//习惯用$value或$val 
//echo $value; 
} 
//然后再这样输出 $arr; 
foreach($arr as $value){//习惯用$value或$val 
echo $value, "\n"; 
} 
?>
ログイン後にコピー

出力結果が期待どおりかどうかを確認してみましょう。結果は次のようになります。

a4
b4
b4

結果が予想と異なります。これは引用によって引き起こされた問題です。
foreach($arr as &$value) が配列を最後まで走査しても、参照関係は壊れません。これは、$value と $arr の最後の単位 ($arr[2]) の参照と同等です。
foreach($arr2 as $value) に行くと、$value の値は常に配列単位の値で変化します。参照関係が壊れていないので、それに応じて $arr[2] の値も変化します。 $arr2 が走査されるまで、$value の値は f であるため、$arr[2] の値も f になります。
この時点で、$arr の値は次のようになります:

Array 
( 
[0] => a4 
[1] => b4 
[2] => f 
)
ログイン後にコピー

これは、表示される最終出力結果とは異なります。次に、foreach($arr as $value) に進みます。同様に、$arr[2] の値も、キーが 1 の場合、つまり $arr[1]、$arr[2] と変化します。 ] 値は $arr[1] の値 (b4) にもなります。次に、キーが 2 の場合、$arr[2] の値は $arr[2] の値、つまり b4 になります。出力した結果です。
そのため、foreach で参照を使用するときは注意してください。また、処理後すぐに参照関係を切断することもでき、後で上記のような事態が起こらないようにすることができます。

りー


以上が& (and 演算子) を使用した foreach ループの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート