2016-08-18 2 views
-3

Я пытаюсь добавить значения из ассоциативного массива при совпадении ключей. Конечная цель была бы возможность достичь такой вывод:Добавить значения из ассоциативного массива, если совпадение ключей

Total Ups: 219
Aug. 1 Ups: 105
Aug. 2 Ups: 52
Aug. 3 Ups: 62

я получил следующее, что работает для единовременной суммы значений массива:

foreach($array as $key => $value){ 
    foreach ($value['report']['daily']['ups'] as $rec){ 
    $upsArr[] = $rec; 
    } 
} 

echo array_sum($upsArr); 

Однако, когда я пытаюсь вычислить сумма за одну дату, скажем, 1 августа, я не могу, похоже, перейти на второй уровень ключей с успехом. У меня есть следующее, чтобы увидеть, если можно было добраться до необходимого уровня:

foreach($array as $key => $subArr){ 
    foreach($subArr as $id => $value['report']['daily']['ups'][1]){ 
    print_r($value); 
    } 
} 

Вот массив Я работаю с:

$array = array(
    array(
    store => 'South', 
    report => array(
     daily => array(
     ups => array('Aug. 1' => '19', 'Aug. 2' => '11', 'Aug. 3' => '13'), 
     sold => array('Aug. 1' => '11', 'Aug. 2' => '5', 'Aug. 3' => '5') 
    )), 
), 
    array(
    store => 'East', 
    report => array(
     daily => array(
     ups => array('Aug. 1' => '38', 'Aug. 2' => '22', 'Aug. 3' => '23'), 
     sold => array('Aug. 1' => '16', 'Aug. 2' => '8', 'Aug. 3' => '8') 
    )), 
), 
    array(
    store => 'West', 
    report => array(
     daily => array(
     ups => array('Aug. 1' => '48', 'Aug. 2' => '19', 'Aug. 3' => '26'), 
     sold => array('Aug. 1' => '28', 'Aug. 2' => '4', 'Aug. 3' => '11') 
    )), 
) 
) 

Спасибо заранее.

+1

Где "ассоциативный массив"? Где ожидаемый результат? –

+0

Пожалуйста, прочитайте [Какие темы я могу задать] (http://stackoverflow.com/help/on-topic) и [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to -ask) И [идеальный вопрос] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) И как создать [Минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) SO ** не является бесплатной программой кодирования или кодирования или отладки или учебного пособия или службы поиска библиотек ** Вы также должны показать, что приложили определенные усилия для решения проблемы ваша собственная проблема. – RiggsFolly

+0

Спасибо за ссылки, я дал им прочитать и улучшить вопрос и форматирование. – proph3t

ответ

1

Проверить это

$detail = []; 
foreach ($array as $item){ 
    foreach ($item['report']['daily']['ups'] as $date=>$total){ 
     if (!array_key_exists($date, $detail)){ 
      $detail[$date] = $total; 
     }else{ 
      $detail[$date] += $total; 
     } 
    } 
} 
// int 219 
var_dump(array_sum($detail)); 

var_dump($detail); 
/* 
array (size=3) 
'Aug. 1' => int 105 
'Aug. 2' => int 52 
'Aug. 3' => int 62 
*/ 
+0

Благодарим вас - все это имеет смысл сейчас, поскольку я не перебирал массив, прежде чем пытаться перебирать вспомогательный массив. – proph3t

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