2017-01-08 17 views
-1

で多次元配列をマージ:私は間違いなく機能を使用すべきだと思うが、私はこの配列からいくつかの値をマージしようとしているPHP

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 (
    [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_merge][1]しかし、私はこの機能には2つのオプションが必要であるのに対し、私はただ1つの配列しか持っていないことがわかりました。

解決策はありますか?

ありがとうございました。

答えて

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、提示されたリスト内で「朝食」の項目が[NDC_Quantity] => 2の場合、アイテムの場所*の数はどのように*できますか? – RomanPerekhrest

関連する問題