azabotok
@azabotok
online

Как дубликаты объеденить в один и суммировать их данные?

Есть массив
`Array (
 [0] => Array (
     [item] => Array (
           [id] => 55 
           [count] => 4 
           )
     )
 [1] => Array (
     [item] => Array (
           [id] => 15 
           [count] => 1 
           )
     )
 [2] => Array (
     [item] => Array (
           [id] => 55 
           [count] => 12 
           )
     )
 [3] => Array (
     [item] => Array (
           [id] => 15 
           [count] => 6 
           )
     )
)`


Мне нужно выполнить поиск дубликатов по массиву в php. Нужно найти дубликаты по идентификатору и суммировать их столбцы count по их идентификатору

Мне нужно заставить его работать следующим образом

`Array (
 [0] => Array (
     [item] => Array (
           [id] => 55 
           [count] => 16 
           )
     )
 [1] => Array (
     [item] => Array (
           [id] => 15 
           [count] => 7 
           )
     )
)`
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Делается одной итерацией (особенность работы isset (оператор ??), которая позволяет нам не ходить повторно по массивам)

$data = [ /** **/];

$res = array_values(array_reduce($data, function (array $acc, array $item) {
    $item['count'] = ($acc[$item['id']]['count'] ?? 0) + $item['count'];
    $acc[$item['id']] = $item;

    return $acc;
}, []));
var_dump($res);


https://onlinephp.io/c/39f04

Можно через foreach, если прямо хочется
$data = [ /** **/];

$res = [];
foreach($data as $datum) {
	$datum['count'] = ($res[$datum['id']]['count'] ?? 0) + $datum['count'];
	$res[$datum['id']] = $datum;
}

var_dump(array_values($res));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы