php
  • foreach
  • 2012-12-12 4 views 2 likes 
    2
    <?php 
    $a = array(1, 2, 3, 4, 5); 
    foreach ($a as $key => $elem) { 
        echo "$key = $elem"; echo ' = '; 
        var_dump(current($a));\ 
    } 
    ?> 
    

    다음과 같은 것을 실행할 때 내가 얻을 출력은 다음과 같습니다foreach는 현재

    0 = 1 = int(2) 
    
    1 = 2 = int(2) 
    
    2 = 3 = int(2) 
    
    3 = 4 = int(2) 
    
    4 = 5 = int(2) 
    

    이 내가

    0 = 1 = int(1) 
    
    1 = 2 = int(2) 
    
    2 = 3 = int(3) 
    
    3 = 4 = int(4) 
    
    4 = 5 = int(5) 
    

    내가? 점점되어야 출력 것을 나에게 보인다 current()를 $ a에서 for 루프 앞에 넣고 int (1)을 얻는다. 따라서 foreach 루프가 증가하는 것처럼 보입니다. 그러나 그 경우에 한 번만 그것을하는 이유는 무엇입니까?

    for 루프에서 next()를 호출하면 증가하지만 그렇지 않으면 증가하지 않습니다. 물론 next()는 int (3) (즉, int (2) 다음의 값)에서 시작합니다.

    +0

    왜 당신이 그것을 var_dumping됩니다 여기

    귀하의 예는 예상 된 결과를 생성하는 각()로 다시이야? – art2

    +0

    처음에 next()를 수행 했으므로 bool (false)을 반환하고 있었기 때문입니다. int (0)와 bool (false)를 구분하기 위해 var_dump()를 사용했습니다. – neubert

    +0

    이 예에서 current = 2 인 이유는 무엇입니까? foreach를 실행하기 전에 current = 1 –

    답변

    0

    current()은 내부 플래그 (포인터)를 사용하고 foreach는 자신의 것을 사용합니다. 당신은 현재의 PHP의 documention을 읽는에서 ArrayIterator

    +0

    그렇다면 current()는 int (1) 대신 int (2)를 말하는 이유는 무엇입니까? 왜 내가 current()를하고 있는지에 관해서 ... 나는 내부 플래그가 next() 또는 prev()가하는 것보다 예상치 못한 방법을 더 잘 설명한다고 생각한다. – neubert

    1

    을 사용할 수 있습니다 (당신이 $ 키에 키가 같은 종류의 바보이다) 이렇게 할 경우 foreach 문을 기대한다처럼

    , 그것은 보이지 않는 현재 포인터를 이동합니다.

    참조하십시오 : 조금 혼란 무슨 http://php.net/manual/en/function.current.php

    는 각 함수는 현재 포인터를 이동 않는다는 것입니다. foreach가 아닌 각각을 사용하여 배열로 루프를 다시 작성하면 원하는 현재 동작을 얻을 수 있습니다.

    <?php 
    $a = array(1, 2, 3, 4, 5); 
    while (list($key,$elem) = each($a)) { 
        echo "$key = $elem"; echo ' = '; 
        var_dump(current($a)); 
    } 
    ?> 
    
    +1

    예 - 그게 혼란 스럽네요. foreach가 포인터를 한 번만 증가시키는 것 같습니다. 매번 늘리거나 조금씩 늘려야하는 것처럼 보입니다. – neubert

    관련 문제