3v4l.org

run code in 500+ PHP versions simultaneously
<?php $input = [['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]]; $colors = []; foreach ($input as $product) { extract($product); $colors[$color][$size] = $count; } $output = []; foreach ($colors as $color => $sizes) { $data = []; foreach ($sizes as $size => $count) { $data[] = ['value' => $size, 'count' => $count]; } if (count($data) == 1) { $output[] = ['color' => $color, 'size' => $data[0]['value'], 'count' => $data[0]['count']]; } else { $output[] = ['color' => $color, 'size' => $data]; } } echo json_encode($output, JSON_PRETTY_PRINT);
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.21, 8.5.0 - 8.5.6
[ { "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:
95.79 ms | 1356 KiB | 4 Q