Skip to content

PHP根据key给二维数组分组

TIP

我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组。这篇文章主要介绍了PHP 根据key 给二维数组分组的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

数据

  • 假如有一个二维数组如下
shell
$data = [
    ['id' => 1, 'name' => 'Alice', 'age' => 30],
    ['id' => 2, 'name' => 'Bob', 'age' => 25],
    ['id' => 3, 'name' => 'Charlie', 'age' => 35],
    ['id' => 4, 'name' => 'David', 'age' => 30],
];
  • 我们需要根据age字段对数组进行分组

分组实现

  1. 使用PHP的array_reduce函数实现,封装成方法如下
shell
/**
* 根据key给二维数组分组
* @param $array
* @param $key
* @return array
*/
function groupBy($array, $key) {
    return array_reduce($array, function ($carry, $item) use ($key) {
        $carry[$item[$key]][] = $item;
        return $carry;
    }, []);
}
$grouped = groupBy($data, 'age');
print_r($grouped);
  1. 使用PHP的foreach循环实现,封装成方法如下
shell
/**
* 根据key给二维数组分组
* @param $array
* @param $key
* @return array
*/
function groupBy($array, $key) {
    $result = [];
    foreach ($array as $item) {
        if (isset($item[$key])) {
            $groupKey = $item[$key];

            if (!isset($result[$groupKey])) {
                $result[$groupKey] = [];
            }
            $result[$groupKey][] = $item;
        }
    }
    return $result;
}
$grouped = groupBy($data, 'age');
print_r($grouped);

结果

  • 执行上面的代码,会得到如下结果
shell
{
    "30": [
        {
            "id": 1,
            "name": "Alice",
            "age": 30
        },
        {
            "id": 4,
            "name": "David",
            "age": 30
        }
    ],
    "25": [
        {
            "id": 2,
            "name": "Bob",
            "age": 25
        }
    ],
    "35": [
        {
            "id": 3,
            "name": "Charlie",
            "age": 35
        }
    ]
}

上次更新于: