2012-08-17 8 views
1

데이터베이스 쿼리로 작성한 배열이 있습니다. 배열 값 posuition을 기반으로 다른 문자열을 할당해야합니다.foreach 루프 내에서 값을 다차원 배열로 푸시

foreach 루프 내에서 if 문이 앞으로 나아갈 것으로 생각했지만 문제가 발생했습니다. 다음은

내 코드는 ......

$test = array(
      array("test", 1), 
      array("test2", 2), 
      array("test4", 4), 
      array("test5", 5), 
      array("test3", 3), 
      array("test6", 6) 
      ); 


foreach($test as $t) { 
if($t[1]==1){ 
    array_push($t, "hello World"); 
    } 
} 
print_r$test); 

모든 솔기는 array_push보다 다른 일을합니다. 루프 후 아무 것도 추가되지 않은 상태에서 print_r ($ test)을 수행합니다.

내가 여기 기념비 바보 같은 일을하고 있습니까? ...

내가 제 3의 값을 가지고 ($ 테스트)

Array 
(
[0] => Array 
    (
     [0] => test 
     [1] => 1 
    ) 

[1] => Array 
    (
     [0] => test2 
     [1] => 2 
    ) 

[2] => Array 
    (
     [0] => test4 
     [1] => 4 
    ) 

[3] => Array 
    (
     [0] => test5 
     [1] => 5 
    ) 

[4] => Array 
    (
     [0] => test3 
     [1] => 3 
    ) 

[5] => Array 
    (
     [0] => test6 
     [1] => 6 
    ) 

) 

내가 기대된다 시험 1 인 print_r 만약 내가 무엇을 얻을 거기에 "안녕하세요 세계"라고

답변

5

Foreach 루프는 배열의 사본과 함께 작동합니다. 원본 배열을 변경하려면 참조를 사용해야합니다.

foreach($test as &$t) { 
    if($t[1]==1){ 
     array_push($t, "hello World"); // or just $t[] = "hello World"; 
    } 
} 
+0

그냥 내가 같은 일을하지만, 내 배열 연관 색인을 달성하기 위해 노력하고있어 내가 배열과 연관 인덱스 여기에 값을 추가하고 싶었 추가, 이것은 내가 array_push 대신 한 것입니다 line $ t [ "new_value_name"] = "hello world"; –

5

아니, 당신은 아무것도 기념비적으로 어리 석을 못합니다. 그러나 배열 $test을 foreach 루프 내에서 변경하려면 참조로 전달해야합니다.

foreach($test as &$t) // Pass by reference 
{ 
    if($t[1] == 1) 
    { 
     array_push($t, "hello World"); // Now pushing to $t pushes to $test also 
    } 
} 
관련 문제