>백엔드 개발 >PHP 튜토리얼 >foreach에서 참조를 사용하여 발생하는 문제

foreach에서 참조를 사용하여 발생하는 문제

WBOY
WBOY원래의
2016-07-29 09:12:01902검색

더 이상 고민하지 말고 다음 코드를 살펴보세요.

<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>

왜 마지막은 c이고 d가 아닌가?

사실 이유는 매우 간단합니다. 첫 번째 루프가 끝나면 변수 v는 arr[3]에 대한 참조가 됩니다. 따라서 두 번째로 foreach를 사용할 때 값 전달 방법이 사용됩니다. 이 방법은 실제로 변수 arr의 값을 순회한 다음 변수 v에 값을 할당합니다. 왜냐하면 변수 v는 arr[3에 대한 참조이기 때문입니다. ] 현재로서는 변수 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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.