Я рекомендую уменьшить глубину вашего массива группировки. Проще говоря, используйте составной временный ключ (на основе идентификатора, размера и цвета) для группировки.
После итерации вызовите array_values()
, если вы хотите удалить временные ключи.
Я использовал некоторые возможности вашего входного массива и выходных значений, чтобы сделать вашу проблему и мое решение более выразительными.
Код: ( Демо )
$ids = [1, 1, 1, 2, 5, 1];
$sizes = ["m", "m", "m", "s", "xl", "s"];
$colors = ["red", "red", "yellow", "orange", "red", "orange"];
foreach ($ids as $i => $id) {
$size = $sizes[$i];
$color = $colors[$i];
$tempKey = "{$id}:{$size}:{$color}";
if (!isset($result[$tempKey])) {
$result[$tempKey] = [
'id' => $id,
'size' => $size,
'color' => $color,
'stock' => 1
];
} else {
++$result[$tempKey]['stock'];
}
}
var_export(array_values($result));
Выход:
array (
0 =>
array (
'id' => 1,
'size' => 'm',
'color' => 'red',
'stock' => 2,
),
1 =>
array (
'id' => 1,
'size' => 'm',
'color' => 'yellow',
'stock' => 1,
),
2 =>
array (
'id' => 2,
'size' => 's',
'color' => 'orange',
'stock' => 1,
),
3 =>
array (
'id' => 5,
'size' => 'xl',
'color' => 'red',
'stock' => 1,
),
4 =>
array (
'id' => 1,
'size' => 's',
'color' => 'orange',
'stock' => 1,
),
)