3v4l.org

run code in 500+ PHP versions simultaneously
<?php $array = [ [ 'product' => [ 'value' => 'basic', 'label' => 'Basic' ], 'countries' => [ 'Japan', // these 'Korea' // two... ], ], [ 'product' => [ 'value' => 'pro', 'label' => 'Pro' ], 'countries' => [ 'Japan', // ...and these two 'Korea' // are identical... ], ], [ 'product' => [ 'value' => 'expert', 'label' => 'Expert' ], 'countries' => [ 'Japan', 'France' ], ] ]; $result = []; foreach ($array as $row) { sort($row['countries']); $compositeKey = implode('_', $row['countries']); if (!isset($result[$compositeKey])) { $result[$compositeKey] = $row; } elseif (isset($result[$compositeKey]['product']['value'])) { $result[$compositeKey]['product'] = [ $result[$compositeKey]['product'], $row['product'] ]; } else { $result[$compositeKey]['product'][] = $row['product']; } } 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.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.21, 8.5.0 - 8.5.7
[ { "product": [ { "value": "basic", "label": "Basic" }, { "value": "pro", "label": "Pro" } ], "countries": [ "Japan", "Korea" ] }, { "product": { "value": "expert", "label": "Expert" }, "countries": [ "France", "Japan" ] } ]

preferences:
99.18 ms | 1361 KiB | 4 Q