Задать вопрос
@Triglav77

Как сложить сумму элементов с одинаковой датой?

Есть массив такого вида

{
  "issuance": {
    "1": {
      "data": "01.20",
      "quantity": 2
    },
    "2": {
      "data": "01.20",
      "quantity": 4
    },
    "3": {
      "data": "04.20",
      "quantity": 2
    },
    "4": {
      "data": "04.20",
      "quantity": 2
    }
}


как получить массив в таком виде (т.е. сложить все quantity)

{
  "issuance": {
    "1": {
      "data": "01.20",
      "quantity": 6
    },
    "2": {
      "data": "04.20",
      "quantity": 4
    }
}
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
<?php

$json = <<<JSON
{
  "issuance": {
    "1": {
      "data": "01.20",
      "quantity": 2
    },
    "2": {
      "data": "01.20",
      "quantity": 4
    },
    "3": {
      "data": "04.20",
      "quantity": 2
    },
    "4": {
      "data": "04.20",
      "quantity": 2
    }
   }
}
JSON
;

$arr = json_decode($json, true, 512, JSON_THROW_ON_ERROR);

$res = new \stdClass();
$res->issuance = array_values(
    array_reduce(
        $arr['issuance'],
       function ($res, $el) {
            $res[$el['data']]['data'] = $el['data'];
            $res[$el['data']]['quantity'] = isset($res[$el['data']]['quantity'])
                ? $res[$el['data']]['quantity'] + $el['quantity']
                : $el['quantity'];

            return $res;
        },
        []
    )
);

var_dump(json_encode($res, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT, 512));

sandbox.onlinephpfunctions.com/code/c5986c6fd8244a...

* JSON_THROW_ON_ERROR — этот флаг появился только в 7.3, если версия меньше — убрать
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dblearn94
@dblearn94
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы