php 二维数组根据参数分组

在一次镇上大规模体检活动中,通过有效组织,按村庄和性别进行人员分组,确保了体检过程的顺利进行与隐私保护。使用PHP代码展示了如何对多维度数据进行分组处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

镇子上要体检了,三个村的人一起结伴前往,到了体检处后谁是哪个村的体检管理员分不清楚了怎么办?
很简单啊,管理员说到各村子的到相应地方站好,于是乎一下子就清晰明了了,但是总不能男女一块体检吧
所以男生和女生就分开体检了,这样不怕被偷窥了,男生在外面要保护好自己(笑)

<?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":"男"
            }
        ]
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值