これ以上ナンセンスではありません。次のコードを見てください:
<code><span>$arr</span> = <span>array</span>(<span>'a'</span>,<span>'b'</span>,<span>'c'</span>,<span>'d'</span>); <span>foreach</span>(<span>$arr</span><span>as</span> &<span>$v</span>){} <span>foreach</span>(<span>$arr</span><span>as</span><span>$v</span>){ var_dump(<span>$v</span>); }</code>
実行後の結果は次のとおりです:
<code><span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) <span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span> //这里为什么是c呢?</span></code>
驚くでしょう、なぜ最後のコードが d ではなく c なのでしょうか?
実際、理由は非常に簡単です。最初のループが終了すると、変数 v は arr[3] への参照になります。したがって、foreach が 2 回目に使用されるときは、変数 v が arr[3] への参照であるため、このメソッドは実際に変数 arr の値を走査し、その値を変数 v に割り当てます。したがって、変数 v に値を代入すると、実際には arr[3] に値が代入されます。
コードを変更しましょう:
<code><span>$arr</span> = <span>array</span>(<span>'a'</span>,<span>'b'</span>,<span>'c'</span>,<span>'d'</span>); <span>foreach</span>(<span>$arr</span><span>as</span> &<span>$v</span>){} <span>foreach</span>(<span>$arr</span><span>as</span><span>$v</span>){ var_dump(<span>$arr</span>);<span>//这里把变量$arr打印出来</span> }</code>
実行後、次のことがわかります:
<code>array (size=<span>4</span>) <span>0</span> => <span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) <span>1</span> => <span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) <span>2</span> => <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span>3</span> => &<span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) array (size=<span>4</span>) <span>0</span> => <span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) <span>1</span> => <span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) <span>2</span> => <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span>3</span> => &<span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) array (size=<span>4</span>) <span>0</span> => <span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) <span>1</span> => <span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) <span>2</span> => <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span>3</span> => &<span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) array (size=<span>4</span>) <span>0</span> => <span>string</span><span>'a'</span> (<span>length</span>=<span>1</span>) <span>1</span> => <span>string</span><span>'b'</span> (<span>length</span>=<span>1</span>) <span>2</span> => <span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>) <span>3</span> => &<span>string</span><span>'c'</span> (<span>length</span>=<span>1</span>)</code>
arr[3] の値が変化し続けていることがわかります。
').addClass('事前番号付け').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });著作権表示: この記事はブロガーによるオリジナル記事です。転載する場合は出典を明記してください。
以上、foreach で参照を使用することで発生する問題点を内容も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。