镇子上要体检了,三个村的人一起结伴前往,到了体检处后谁是哪个村的体检管理员分不清楚了怎么办?
很简单啊,管理员说到各村子的到相应地方站好,于是乎一下子就清晰明了了,但是总不能男女一块体检吧
所以男生和女生就分开体检了,这样不怕被偷窥了,男生在外面要保护好自己(笑)
<?php
$arr = [
[
'id' => 1,
'name' => '张倩',
'group' => '张家村',
'sex' => '女'
],
[
'id' => 2,
'name' => '李斯',
'group' => '李家村',
'sex' => '男'
],
[
'id' => 3,
'name' => '王璐',
'group' => '王家村',
'sex' => '女'
],
[
'id' => 4,
'name' => '李世民',
'group' => '李家村',
'sex' => '男'
],
[
'id' => 5,
'name' =>'王武',
'group' => '王家村',
'sex' => '男'
],
[
'id' => 6,
'name' =>'张三丰',
'group' => '张家村',
'sex' => '男'
]
];
/**
* @param $arr 二维数组
* @param $key 分组条件
* @return array
*/
function array_group_by($arr, $key)
{
$grouped = [];
foreach ($arr as $value) {//先根据指定下标分组(arr1)
$grouped[$value[$key]][] = $value;
}
// Recursively build a nested grouping if more parameters are supplied
// Each grouped array value is grouped according to the next sequential key
if (func_num_args() > 2) {//判断实际传参个数是否大于定义的参数个数
$args = func_get_args();//获取实际传入的各个参数
foreach ($grouped as $key => $value) {
$parms = array_merge([$value], array_slice($args, 2, func_num_args()));//将arr1中第一个分组取出,与非定义参数合并如:[arr1,'key2','key3'];
$grouped[$key] = call_user_func_array('array_group_by', $parms);//调用回调函数
}
}
return $grouped;
}
$res = array_group_by($arr, 'group','sex');
echo json_encode($res, JSON_UNESCAPED_UNICODE);
返回结果
{
"张家村":{
"女":[
{
"id":1,
"name":"张倩",
"group":"张家村",
"sex":"女"
}
],
"男":[
{
"id":6,
"name":"张三丰",
"group":"张家村",
"sex":"男"
}
]
},
"李家村":{
"男":[
{
"id":2,
"name":"李斯",
"group":"李家村",
"sex":"男"
},
{
"id":4,
"name":"李世民",
"group":"李家村",
"sex":"男"
}
]
},
"王家村":{
"女":[
{
"id":3,
"name":"王璐",
"group":"王家村",
"sex":"女"
}
],
"男":[
{
"id":5,
"name":"王武",
"group":"王家村",
"sex":"男"
}
]
}
}