2012-08-17 75 views
1

我有一個從數據庫查詢構建的數組。基於數組的值,我需要爲它分配另一個字符串。將值推到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)沒有添加任何東西。

我做錯事身世愚蠢嗎?...

這是我所得到的,如果我的print_r($測試)

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有一個3個值那裏叫做「hello world」

回答

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」; – 2013-11-15 10:42:34

5

不,你沒有做任何奇怪的事情。但是如果你想在foreach循環中改變數組$test,你必須將它作爲參考傳遞。

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