2016-03-07 6 views
1

Вы можете суммировать ниже массив продаж по НомерНеделеСумма массивы значений по номеру недели

Array 
(
    [0] => Array 
    (
     [DATE] => 2015-03-06 
     [store] => 18 
     [weeknum] => 11 
     [sales] => 10 
    ) 
    [1] => Array 
    (
     [DATE] => 2015-03-08 
     [store] => 18 
     [weeknum] => 11 
     [sales] => 5 
    ) 
    [2] => Array 
    (
     [DATE] => 2015-03-09 
     [store] => 18 
     [weeknum] => 11 
     [sales] => 5 
    ) 

Я хотел бы, чтобы достичь чего-то вроде этого

[0] => Array 
    (

     [store] => 18 
     [weeknum] => 11 
     [sales] => 20 
    ) 

до сих пор я пытался сумма массива, но это похоже, не работает

ответ

1

Существует много разных способов и ответов (eg.). Например:

Использование Array Reduce:

$total_sales = array_reduce($items, function($carry, $item){ 
    $carry['store'] = $item['store']; 
    $carry['weeknum'] = $item['weeknum']; 
    $carry['sales'] += $item['sales']; 
    return $carry; 
}, []); 

Или Использование Array column:

$total_sales = array_sum(array_column($items, 'sales')); 
0

Просто проведите по массиву и добавьте значения полей в контейнер сумм.

Я также добавил номер магазина как уникальный идентификатор, если есть несколько магазинов, для которых вы хотите получить индивидуальную информацию. Если вы хотите, чтобы все магазины просто меняли $key = $weekNumber . $item['store']; с $key = $weekNumber;.

данных:

$items = [ 
    [ 
     'DATE' => '2015-03-06', 
     'store' => 18, 
     'weeknum' => 11, 
     'sales' => 10, 
    ], 
    [ 
     'DATE' => '2015-03-08', 
     'store' => 18, 
     'weeknum' => 11, 
     'sales' => 5, 
    ], 
    [ 
     'DATE' => '2015-03-09', 
     'store' => 18, 
     'weeknum' => 11, 
     'sales' => 5, 
    ], 
    [ 
     'DATE' => '2015-03-09', 
     'store' => 18, 
     'weeknum' => 12, 
     'sales' => 5, 
    ], 
]; 

Код:

<?php 

$storeWeekSums = []; 

foreach ($items as $item) { 
    // Save the key to refer to it later 
    $weekNumber = $item['weeknum']; 

    $key = $weekNumber . $item['store']; 

    if (!isset($weekSums[$weekNumber])) { 
     // The week and store does not already exist, let's create it with a value 
     $storeWeekSums[$key] = [ 
      'store' => $item['store'], 
      'weeknum' => $item['weeknum'], 
      'sales' => $item['sales'], 
     ]; 
    } else { 
     // The week and store already exists, so we'll add to the current value instead 
     $storeWeekSums[$key]['sales'] += $item['sales']; 
    } 
} 

print_r($storeWeekSums); 

Выход::

Array 
(
    [1118] => Array 
     (
      [store] => 18 
      [weeknum] => 11 
      [sales] => 5 
     ) 

    [1218] => Array 
     (
      [store] => 18 
      [weeknum] => 12 
      [sales] => 5 
     ) 

) 

DEMO

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