2017-01-08 103 views
-1

我想從這個數組合並一些值:合併多維數組在PHP

Array (
    [0] => Array (
     [NDC_Date] => 2017-01-06 
     [NDC_Item] => Night 
     [NDC_Rate] => 108.00 
     [NDC_Quantity] => 1 
    ) 
    [1] => Array (
     [NDC_Date] => 2017-01-07 
     [NDC_Item] => Night 
     [NDC_Rate] => 108.00 
     [NDC_Quantity] => 1 
    ) 
    [2] => Array (
     [NDC_Date] => 2017-01-08 
     [NDC_Item] => Night 
     [NDC_Rate] => 120.00 
     [NDC_Quantity] => 1 
    ) 
    [3] => Array (
     [NDC_Date] => 2017-01-06 
     [NDC_Item] => Breakfast 
     [NDC_Rate] => 10.00 
     [NDC_Quantity] => 2 
    ) 
) 

我想是這樣的:

Array (
    [0] => Array (
     [NDC_Date] => 2017-01-06, 2017-01-07 
     [NDC_Item] => Night 
     [NDC_Rate] => 108.00 
     [NDC_Quantity] => 2 
    ) 
    [1] => Array (
     [NDC_Date] => 2017-01-08 
     [NDC_Item] => Night 
     [NDC_Rate] => 120.00 
     [NDC_Quantity] => 1 
    ) 
    [2] => Array (
     [NDC_Date] => 2017-01-06 
     [NDC_Item] => Breakfast 
     [NDC_Rate] => 10.00 
     [NDC_Quantity] => 2 
    ) 
) 

我想我一定要使用的功能[array_merge][1]這個東西,但我看到這個功能需要2個選項,而我只有一個數組。

有沒有解決方案?

感謝。

回答

0

通過'NDC_Item'鍵和array_values功能使用分組解決方案:

// $arr is your initial array 
$result = []; 
foreach ($arr as $item) { 
    $k = $item['NDC_Item']; 
    if (!isset($result[$k])) { 
     $result[$k] = $item; 
    } elseif (($i = $result[$k]) 
      && $item['NDC_Rate'] == $i['NDC_Rate'] 
      && $item['NDC_Quantity'] == $i['NDC_Quantity']) { 
     $result[$k]['NDC_Date'] .= ', '. $item['NDC_Date']; 
    } else { 
     $result[$k. time()] = $item; 
    } 
} 
$result = array_values($result); 
print_r($result); 

測試環節: https://eval.in/711956

+0

坎它看起來很完美。唯一的一件事是'NDC_Quantity'應該是項目放入'NDC_Item'的數量。其實,你的代碼保持在'1'。 –

+0

@ user7347588,當它在項目列表中是單個項目時,如果項目'「Breakfast」'具有[NDC_Quantity] => 2',它如何能*成爲項目地點的數量? – RomanPerekhrest