3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = Array ( 0 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '1000', ), 1 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '7777', ), 2 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '7777', ), 3 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '4000', ), 4 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '4000', ), 5 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '5000', ), 6 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '6000', ), 7 => Array ( 'name' => 'John Doe', 'age' => '36', 'code' => '437', 'group' => '6000', ), ); $names = array_column($array, "name"); $groups = array_column($array, "group"); foreach(array_unique($names) as $name){ $intersects = array_intersect_key($array, array_intersect($names, [$name])); $new[$name] = ["name" => $name, "age" => end($intersects)["age"]]; foreach(array_unique($groups) as $group){ $intersects = array_intersect_key($array, array_intersect($groups, [$group])); foreach($intersects as $int){ $temp = array_diff($int, ["name" => $new[$name]["name"], "age" => $new[$name]["age"]]); if($temp["group"] == "1000" || $temp["group"] == "7777"){ $new[$name][$group][] = $temp; }else{ $new[$name]["others"][] = $temp; } } } } var_dump($new);

preferences:
54.49 ms | 402 KiB | 5 Q