3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ ['color' => '#000000', 'size' => 'L', 'count' => 2], ['color' => '#000000', 'size' => 'XL', 'count' => 1], ['color' => '#ffffff', 'size' => 'L','count' => 2], ['color' => '#ffffff', 'size' => 'XL', 'count' => 1], ['color' => '#ff0000', 'size' => 'L', 'count' => 1] ]; $result = []; foreach ($array as $row) { extract($row); if (!isset($result[$color])) { $result[$color] = $row; } elseif (isset($result[$color]['count'])) { $result[$color]['size'] = [ [ 'value' => $result[$color]['size'], 'count' => $result[$color]['count'] ], [ 'value' => $size, 'count' => $count ] ]; unset($result[$color]['count']); } else { $result[$color]['size'][] = [ 'value' => $size, 'count' => $count ]; } } echo json_encode(array_values($result), JSON_PRETTY_PRINT);

preferences:
24.8 ms | 406 KiB | 5 Q