Добавление многомерных значений подмассива другими значениями подмассива - PullRequest
0 голосов
/ 03 июля 2018

Я работаю над панелью статистики, где хочу отображать статистику, отсортированную по календарным неделям.

Я получаю данные в многомерном массиве в следующем формате:

Array
(
   [success] => 1
   [stats] => Array
      (
        [0] => Array
            (
                [year] => 2018
                [week] => 14
                [sum] => 18
                [country] => at
            )

        [1] => Array
            (
                [year] => 2018
                [week] => 14
                [sum] => 907
                [country] => de
            )

        [2] => Array
            (
                [year] => 2018
                [week] => 15
                [sum] => 2
                [country] => 
            )

        [3] => Array
            (
                [year] => 2018
                [week] => 15
                [sum] => 65
                [country] => at
            )

        [4] => Array
            (
                [year] => 2018
                [week] => 15
                [sum] => 237
                [country] => de
            )
        )

     )

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

Array
(
   [success] => 1
   [stats] => Array
     (
        [0] => Array
            (
                [year] => 2018
                [week] => 14
                [sum] => 925
            )

        [1] => Array
            (
                [year] => 2018
                [week] => 15
                [sum] => 304
            )

       )

  )

country больше не нужен, и это должна быть только 1 запись на каждую календарную неделю.

1 Ответ

0 голосов
/ 03 июля 2018

Нечто подобное должно сработать

$newArray = [];
foreach ($firstArray['stats'] as $entry) {
    if (isset($newArray[sprintf('%d-%d', $entry['year'], $entry['week'])])) {
        $newArray[sprintf('%d-%d', $entry['year'], $entry['week'])]['sum'] += $entry['sum'];
    } else {
        $newArray[sprintf('%d-%d', $entry['year'], $entry['week'])] = $entry;
    }
}

EDIT

$newArray = [];

foreach ($stats['stats'] as $entry) {
   if (isset($newArray[sprintf('%d-%d', $entry['year'], $entry['week'])])) {
     $newArray[sprintf('%d-%d', $entry['year'], $entry['week'])]['sum'] += 
     $entry['sum'];
   } else {
     $newArray[sprintf('%d-%d', $entry['year'], $entry['week'])] = $entry;
   }
   unset($newArray[sprintf('%d-%d', $entry['year'], $entry['week'])]['country']);

}

$stats['stats'] = array_values($newArray);

@ Рок Д. Спасибо за это ... Я мог бы адаптировать твой пример, чтобы он идеально соответствовал моим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...