Например, вот мой список заказов:
Cup red --------> 2
TV-1 -----------> 1
TV-1 -----------> 1
Table ----------> 1
Table ----------> 1
Cup white ------> 1
Cup white ------> 3
Cup green ------> 4
Ожидаемый результат:
Cup red --------> 2
TV-1 -----------> 2
Table ----------> 2
Cup white ------> 4
Cup green ------> 4
Можете ли вы показать мне свои идеи или любые те же проблемы?
Можете ли вы показать, как на самом деле настроен ваш массив.
Откуда такой массив
Предполагая, что ваш исходный массив выглядит так:
$arr = [
['Cup red' => 2], ['TV-1' => 1], ['TV-1' => 1], ['Table' => 1], ['Table' => 1], ['Cup white' => 1],
['Cup white' => 3], ['Cup green' => 4],
];
Затем вы можете использовать:
$keyStore = [];
foreach($arr as $record) {
foreach($record as $key => $value) {
$keyStore[$key] = $key;
}
}
$result = [];
foreach ($arr as $key0 => $value) {
foreach ($value as $key1 => $item) {
if (in_array($key1, $keyStore)) {
$result[$key1] = isset($result[$key1]) ? $result[$key1] += $item : $result[$key1] = $item;
}
}
}
Выход print_r($result): Множество
(
[Cup red] => 2
[TV-1] => 2
[Table] => 2
[Cup white] => 4
[Cup green] => 4
)
Демо
Если мы предположим, что ваш список представляет собой массив массивов:
$array = [
['Cup red' => 2],
...
];
Вы можете сделать это с помощью методов Collection довольно легко:
collect($array)->mapToGroups(fn ($i) => $i)
->map->sum()
->all()
После mapToGroups у вас есть такая структура:
[
'Cup red' => [2],
'Cup white' => [1, 3],
...
]
Затем вы можете использовать map для повторения каждого из них, чтобы получить суммы.
Laravel 8.x Документы - Коллекции - Доступные методы:
Взгляните на array_merge