<?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