Делается одной итерацией (особенность работы 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));