2017-01-08 3 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); 

Test ссылка: https://eval.in/711956

+0

Hum он выглядит идеально. Единственное, что «NDC_Quantity» должно быть номером позиции в «NDC_Item». Фактически, с вашим кодом он остается на '1'. –

+0

@ user7347588, как это можно * быть номером позиции пункта *, когда элемент '" Завтрак ''имеет' [NDC_Quantity] => 2', пока он не указан в представленном списке? – RomanPerekhrest

Смежные вопросы