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) { if (!isset($result[$row['color']])) { $result[$row['color']] = $row; } elseif (isset($result[$row['color']]['count'])) { $result[$row['color']]['size'] = [ [ 'value' => $result[$row['color']]['size'], 'count' => $result[$row['color']]['count'] ], [ 'value' => $row['size'], 'count' => $row['count'] ] ]; unset($result[$row['color']]['count']); } else { $result[$row['color']]['size'][] = [ 'value' => $row['size'], 'count' => $row['count'] ]; } } echo json_encode(array_values($result), JSON_PRETTY_PRINT);
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
[ { "color": "#000000", "size": [ { "value": "L", "count": 2 }, { "value": "XL", "count": 1 } ] }, { "color": "#ffffff", "size": [ { "value": "L", "count": 2 }, { "value": "XL", "count": 1 } ] }, { "color": "#ff0000", "size": "L", "count": 1 } ]

preferences:
108.41 ms | 408 KiB | 5 Q