2013-07-15 34 views
0

我爲每個循環運行兩個並將其中一個推入另一個循環。這工作正常,除非我有不止一場比賽。在那種情況下,我只得到最後一個。對於標題感到抱歉,不太清楚如何在一行中調用這個問題。如果在每個循環中推動多維數組 - php

foreach($items as &$item) { 
    foreach($fruits as &$fruit) { 
     $i = 0; 
     if($fruit['for']==$item['id']) { 
      $item["fruits"][$i] = $fruit; 
      $i++; 
     } 
    } 
} 

第一陣列:

array(114) { 
    [0]=> 
    array(5) { 
    ["id"]=> 
    string(2) "76" 
    ... 
    } 
... 
} 

第二陣列:

array(47) { 
    [0]=> 
    array(5) { 
    ["id"]=> 
    string(1) "4" 
    ["for"]=> 
    string(2) "76" 
    ... 
    } 
    ... 
} 

隨着if($fruit['for']==$item['id'])邏輯的多個匹配,我想以下輸出。

array(114) { 
    [0]=> 
    array(6) { 
    ["id"]=> 
    string(2) "76" 
    ... 
    ["fruits"]=> 
    array(2) { 
     [0]=> 
     array(5) { 
     ["id"]=> 
     string(1) "4" 
     ["for"]=> 
     string(2) "76" 
     ... 
     } 
     [1]=> 
     array(5) { 
     ["id"]=> 
     string(2) "33" 
     ["for"]=> 
     string(2) "76" 
     ... 
     } 
    } 
    } 
} 

我在做什麼錯?

回答

1

您設置$i爲0您檢查每一個數組元素。這使得$i++無用,你的第一場比賽被覆蓋。試試下面這個:

foreach($items as &$item) { 
    $i = 0; 
    foreach($fruits as &$fruit) { 
     if($fruit['for']==$item['id']) { 
      $item["fruits"][$i] = $fruit; 
      $i++; 
     } 
    } 
} 

或這樣的:(取決於究竟你需要)

$i = 0; 
foreach($items as &$item) { 
    foreach($fruits as &$fruit) { 
     if($fruit['for']==$item['id']) { 
      $item["fruits"][$i] = $fruit; 
      $i++; 
     } 
    } 
} 

這樣,每次你覺得它得到一個新的密鑰生成新的比賽。

+0

這樣就可以了....謝謝!我不確定如何感覺,爲自己變得如此親近而感到自豪(對我而言,php是新的),或者我沒有看到自己的錯誤感到難過。非常感謝你! – veksen

2

採取$i外循環,你的對手總是存儲在$item["fruits"][0]

foreach($items as &$item) { 
    $i = 0; 
    foreach($fruits as &$fruit) { 
     if($fruit['for']==$item['id']) { 
      $item["fruits"][$i] = $fruit; 
      $i++; 
     } 
    } 
} 
+0

'$ i = 0;'第一個循環內部是我想要的結果,但是感謝您指向正確的方向:) – veksen

+0

現在已經修正! –