2012-07-02 8 views
0

다음 foreach 루프에서 이상한 동작이 발생합니다. PHP 5.3.0에서 실행 중입니다.Foreach 루프의 이상한 동작

print_r($this->form_spec['fields']); 
foreach($this->form_spec['fields'] as $f=>$field) { 
    print_r($this->form_spec['fields']);      
} 

첫 번째 인 print_r은 다음 (참고 : 내 지점을 명확하게하기 위해 키의 무리를 제외 한) : 인쇄

Array 
(  
    [0] => Array 
    (
     [field_name] => d_first_name 
    ) 

    [1] => Array 
     (
      [field_name] => d_last_name 
     ) 
) 

두 번째 print_r 인쇄 :

Array 
(
    [0] => Array 
     (
      [field_name] => d_first_name 
     ) 

    [1] => Array 
     (
      [field_name] => d_first_name 
     ) 
) 

$ this-> form_spec [ 'fields']는 이미 각 루프에 도달하기 전에 값을 가지고 있습니다. 첫 번째 print_r은 올바른 값을 표시합니다. 두 번째 print_r은 값이 변경되었음을 나타냅니다. 이들 사이에 다른 코드는 없습니다.

5.3.0의 버그 일 수 있습니까?

문제를 해결할 수있는 유일한 방법은 대신 for 루프를 사용하는 것이었지만 Foreach는 항상 작동해야했습니다. 아무도 나에게 계몽 수 있습니까?

[편집] 단지이 문제는 $ this-> form_spec [ 'fields']의 내용이 내가 올바르게 인쇄 할 수 없다는 사실을 변경한다는 것이 었습니다.

+0

stackoverflow에서 코드를 포맷하려면, 그것을 선택하고'Ctrl' +'K'을 ​​누르십시오. – phihag

+1

그래서 당신의 문제는 무엇입니까? 당신은'print_r' 같은 var를 두 번 두번 가지고 같은 결과를냅니다 .... – NDM

+0

두번째 print_r은 d_first_name을 두 번 던지거나, 그게 아닌 것 같습니다. – Luceos

답변

2

$field의 결과 대신 $this->form_spec['fields']을 인쇄하고 있습니다.

편집 난 당신이 무슨 뜻인지 볼 수 있습니다 이제

. 루프의 어딘가에서 반복하면서 객체의 내용을 변경하는 것처럼 보입니다. 관련 코드를 게시하시기 바랍니다.

나는 당신이 가지고있는 것을 반복하는 동안 반복되는 동안 더 많은 코드가 다루어지고 있다고 확신한다.

print_r($this->form_spec['fields']); 
foreach($this->form_spec['fields'] as $f=>$field) { 
    print_r($field);      
} 

난 당신의 코드에서이 테스트를 실행 한 : - -이 :

+0

그것이 내가 생각한 것이지만, foreach 루프의 모든 것을 제거했습니다.전체 foreach 루프가 있습니다. –

1

당신은이 일을해야

for($i = 0; $i < 10; $i++){ 
    $form_spec['fields'][] = array('field_name' => 'field_' . $i); 
} 
print_r($form_spec['fields']); 
foreach($form_spec['fields'] as $f => $field) { 
    print_r($form_spec['fields']); 
} 

(PHP_VERSION = 5.3.0)

하고 출력을 가지고 예상 했으니 어딘가에 배열을 바꿔야 만 해. 코드를 매우 조심스럽게 검사해야합니다.

출력 : -

Array 
(
    [0] => Array 
     (
      [field_name] => field_0 
     ) 

    [1] => Array 
     (
      [field_name] => field_1 
     ) 

    [2] => Array 
     (
      [field_name] => field_2 
     ) 

    [3] => Array 
     (
      [field_name] => field_3 
     ) 

    [4] => Array 
     (
      [field_name] => field_4 
     ) 

    [5] => Array 
     (
      [field_name] => field_5 
     ) 

    [6] => Array 
     (
      [field_name] => field_6 
     ) 

    [7] => Array 
     (
      [field_name] => field_7 
     ) 

    [8] => Array 
     (
      [field_name] => field_8 
     ) 

    [9] => Array 
     (
      [field_name] => field_9 
     ) 

) 

반복 10 회.

+0

안녕하세요, 요점은 $ this-> form_spec [ 'fields'] 안에있는 값이 바뀌지 않아야한다는 것입니다. –

+2

@AntonyDAndrea 그런 다음 질문에 명확하게 기재하십시오. – vascowhite

+1

+1, 코드가 명확하지 않으며 form_spec 변수가 코드에 지정되어 있지 않습니다. –