2015-03-04 2 views
1

Я хочу сумму этих 2 массивов.Тримерные массивы массивов PHP

первый массив:

Array(
[abc] => Array 
    (
    [yesterday] => 20 
    [today] => 50 
    [tomorrow] => 70 
    ) 

[pqr] => Array 
    (
    [yesterday] => 10 
    [today] => 20 
    [tomorrow] => 30 
    ) 

[xyz] => Array 
    (
    [yesterday] => 30 
    [today] => 20 
    [tomorrow] => 10 
    ) 
) 

второго массива:

Array(
[abc] => Array 
    (
    [yesterday] => 70 
    [today] => 20 
    [tomorrow] => 50 
    ) 

[pqr] => Array 
    (
    [yesterday] => 20 
    [today] => 30 
    [tomorrow] => 10 
    ) 

[xyz] => Array 
    (
    [yesterday] => 10 
    [today] => 30 
    [tomorrow] => 20 
    ) 
) 

Сумма обоих массивов:

Array(
[abc] => Array 
    (
    [yesterday] => 90 
    [today] => 70 
    [tomorrow] => 120 
    ) 

[pqr] => Array 
    (
    [yesterday] => 30 
    [today] => 50 
    [tomorrow] => 40 
    ) 

[xyz] => Array 
    (
    [yesterday] => 40 
    [today] => 50 
    [tomorrow] => 30 
    ) 
) 
+2

Вы пробовали что-нибудь? – Rizier123

+0

yep Я пробовал с циклом for, но у меня много массивов, поэтому мне нужен ярлык. – Hytool

+2

Тогда, по крайней мере, покажите нам свои попытки – Rizier123

ответ

1

Это должно работать для вас:

Здесь я иду через каждый innerArray из $arr1 и $arr2 с array_map(). Затем я перехожу через каждое значение innerArray и добавляю их вместе также с array_map() после этого. Я совмещаю возвращенный массив с ключами innerArray с array_combine(). И в конце я снова объединяю массив с ключами $arr1.

<?php 

    $arr1 = [ 
      "abc" => [ 
       "yesterday" => 20, 
       "today" => 50, 
       "tomorrow" => 70 
      ], 
      "pqr" => [ 
       "yesterday" => 10, 
       "today" => 20, 
       "tomorrow" => 30 
      ], 
      "xyz" => [ 
       "yesterday" => 30, 
       "today" => 20, 
       "tomorrow" => 10 
      ] 
     ]; 

    $arr2 = [ 
      "abc" => [ 
       "yesterday" => 70, 
       "today" => 20, 
       "tomorrow" => 50 
      ], 
      "pqr" => [ 
       "yesterday" => 20, 
       "today" => 30, 
       "tomorrow" => 10 
      ], 
      "xyz" => [ 
       "yesterday" => 10, 
       "today" => 30, 
       "tomorrow" => 20 
      ] 
     ]; 


    $result = array_combine(array_keys($arr1), array_map(function($a1, $a2){ 
     return array_combine(array_keys($a1), array_map(function($v1, $v2){ return $v1+$v2;}, $a1, $a2)); 
    }, $arr1, $arr2)); 


    print_r($result); 


?> 

Выход:

Array 
(
    [abc] => Array 
     (
      [yesterday] => 90 
      [today] => 70 
      [tomorrow] => 120 
     ) 

    [pqr] => Array 
     (
      [yesterday] => 30 
      [today] => 50 
      [tomorrow] => 40 
     ) 

    [xyz] => Array 
     (
      [yesterday] => 40 
      [today] => 50 
      [tomorrow] => 30 
     ) 

) 
+0

thanx Rizier123, я бы хотел проголосовать. – Hytool

2
$b['yesterday'] = array_sum(array_column($a,'yesterday')); 
$b['today'] = array_sum(array_column($a,'today')); 
... 

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

1
$output = array(); 
foreach ($array1 as $index => $value) { 

    $output[$index]['yesterday'] = ($array2[$index]['yesterday'] + $value['yesterday']); 
    $output[$index]['today'] = ($array2[$index]['today'] + $value['today']); 
    $output[$index]['tomorrow'] = ($array2[$index]['tomorrow'] + $value['tomorrow']); 
} 

Это может быть не самым симпатичным решение, но я думаю, что с этим и @ решение Rizier123 ты ни обернуть все в функции и передать 2 массивы в с помощью чего-то вроде следующей функции: function sumArrays($array1, $array2, &output) и вместо использования =+=.

Надеюсь, это поможет!

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