2016-04-19 3 views
-1

I имеет следующую структуру массива:PHP слияние массива массивов и значений приращения?

[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 3 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

[1] => Array 
    (
     [name] => Bedste boller 
     [amount] => 15 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

[2] => Array 
    (
     [name] => Grov boller 
     [amount] => 15 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

У меня есть несколько таких массивов, и я хотел бы объединить их на СУММЕ только ключ. Это означает, что если у меня есть еще один массив, содержащий это:

[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 2 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

И я объединить его, было бы показать это:

[0] => Array 
    (
     [name] => Spinat boller 
     [amount] => 5 
     [category] => Bløddej og Boller 
     [unit_amount] => 15 
    ) 

Очевидно, я мог пройти это вручную, но я надеялся, что я мог бы использовать PHP Объединить функцию как-то, но не уверен, как это сделать.

Спасибо всем!

* Редактирование 1 * Если я вобще функцию array_merge, он просто добавляет все это вместе, так что я иду от:

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

к:

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 
[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 2 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

, но я хочу :

[0] => Array 
(
    [name] => Spinat boller 
    [amount] => 3 
    [category] => Bløddej og Boller 
    [unit_amount] => 15 
) 

[0] => Array( [имя] => Spinat Боллер [сумма] => 5 [категория] => Bløddej ог Boller [unit_amount] => 15 )

Обратите внимание, как сумма в настоящее время 5 (другие массивы имели 2 и 3). Все остальное одинаковое и соответствует, ТОЛЬКО сумма добавляется и увеличивается.

+1

'array_merge' функция не работает? Например, http://php.net/manual/ru/function.array-merge.php используйте: '$ res = array_merge (массивы $ array1, $ array2, $ array3 ... и etc params)' – Naumov

+0

is unit_amount & категория всегда исправляется с тем же именем? –

+0

Я хочу посмотреть имя и увеличить сумму. Поэтому, если у меня есть 2 с тем же именем, он увеличивает значение ТОЛЬКО и оставляет всех остальных, так как они также будут совпадать. Все будет соответствовать, кроме количества, которое может быть другим, поэтому да, количество и категория единицы всегда одинаковы для этого имени (имя уникально). –

ответ

0

Так что я подумал о том, можно ли сделать это в одном выражении.

Вы должны объединить несколько функций, но поведение такое же, как и с ручной итерацией. Результатом этого функционального подхода выглядит следующим образом:

$result = array_values(
    array_merge(
     ...array_reverse(
      array_map(function ($arr) { 
       return array_combine(
        array_column($arr, 'name'), 
        array_values($arr) 
       ); 
      }, [$arr1, $arr2, $arr3]) 
     ) 
    ) 
); 

Хотя это может быть сделано, я придерживаюсь итерационного подхода было бы лучше всего по причинам ремонтопригодности:

$tmp = []; 

foreach ($arrays as $arr) { 
    foreach ($arr as $elem) { 
     if (!isset($tmp[$elem['name']])) { 
      $tmp[$elem['name']] = $elem; 
     } 
    } 
} 

$result = array_values($tmp); 
Смежные вопросы