个性化阅读
专注于IT技术分析

如何在PHP中按键对关联数组进行分组

本文概述

有时, SQL的按功能分组不足以根据你的需求对某些数据进行分组。无论是什么原因, 你都可以使用自己喜欢的编程语言对数据进行分组。例如, 在PHP中, 可以通过某个键对关联数组进行分组, 因此你将能够按某种顺序(组)显示其数据。

在本文中, 我们将与你分享一个小片段, 使你可以按某个键对数组的项进行分组。

按功能分组

以下函数创建一个新数组, 该数组使用关联结构存储原始输入数组的所有数据。迭代一次, 为具有指定键的数据值的新数组创建一个新键(因此, 当出现具有相同值的新项目时, 它将被推入该键)。如果输入数组的某项不包含已定义的键, 则它将被推入新数组的空字符串键中:

<?php

/**
 * Function that groups an array of associative arrays by some key.
 * 
 * @param {String} $key Property to sort by.
 * @param {Array} $data Array that stores multiple associative arrays.
 */
function group_by($key, $data) {
    $result = array();

    foreach($data as $val) {
        if(array_key_exists($key, $val)){
            $result[$val[$key]][] = $val;
        }else{
            $result[""][] = $val;
        }
    }

    return $result;
}

用法

考虑以下数据结构:

<?php 

$data = array(
    array(
        "id" => 1, "name" => "Bruce Wayne", "city" => "Gotham", "gender" => "Male"
    ), array(
        "id" => 2, "name" => "Thomas Wayne", "city" => "Gotham", "gender" => "Male"
    ), array(
        "id" => 3, "name" => "Diana Prince", "city" => "New Mexico", "gender" => "Female"
    ), array(
        "id" => 4, "name" => "Speedy Gonzales", "city" => "New Mexico", "gender" => "Male"
    )
);

我们有4个简单的项目, 我们想按一个属性(例如性别)对它们进行分组, 因此按该键对数据进行分组的代码为:

<?php

// Group data by the "gender" key 
$byGroup = group_by("gender", $data);

// Dump result
echo "<pre>" . var_export($byGroup, true) . "</pre>";

转储的数组将具有以下结构:

array (
    'Male' => 
        array (
        0 => 
        array (
            'id' => 1, 'name' => 'Bruce Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 1 => 
        array (
            'id' => 2, 'name' => 'Thomas Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 2 => 
        array (
            'id' => 4, 'name' => 'Speedy Gonzales', 'city' => 'New Mexico', 'gender' => 'Male', ), ), 'Female' => 
        array (
        0 => 
        array (
            'id' => 3, 'name' => 'Diana Prince', 'city' => 'New Mexico', 'gender' => 'Female', ), ), )

如你所见, 你将收到一个新的关联数组, 其中包含数据的所选键的所有可能值(在这种情况下为性别), 因此我们有2个组, 即Male和Female。如果你将另一个属性(例如城市)分组, 则将遵循相同的逻辑:

<?php

// Group data by the "city" key 
$byGroup = group_by("city", $data);

// Dump result
echo "<pre>" . var_export($byGroup, true) . "</pre>";

其输出将是:

array (
    'Gotham' => 
        array (
        0 => 
        array (
            'id' => 1, 'name' => 'Bruce Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 1 => 
        array (
            'id' => 2, 'name' => 'Thomas Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), ), 'New Mexico' => 
        array (
        0 => 
        array (
            'id' => 3, 'name' => 'Diana Prince', 'city' => 'New Mexico', 'gender' => 'Female', ), 1 => 
        array (
            'id' => 4, 'name' => 'Speedy Gonzales', 'city' => 'New Mexico', 'gender' => 'Male', ), ), )

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在PHP中按键对关联数组进行分组

评论 抢沙发

评论前必须登录!