PHP 根据key 给二维数组分组

yizhihongxing

为了根据key给二维数组分组,我们可以使用PHP的array_reduce()函数。

具体步骤如下:

1.定义一个空数组,用于存储结果;

2.使用array_reduce()函数遍历二维数组;

3.判断当前数组元素key值是否存在于结果数组中,如果存在,则将该元素push进对应的子数组;如果不存在,则创建该key对应的子数组并push元素进去;

4.最终返回结果数组。

以下是示例代码:

$arr = array(
    array('name' => 'John', 'age' => 21, 'gender' => 'male'),
    array('name' => 'Jane', 'age' => 25, 'gender' => 'female'),
    array('name' => 'Bob', 'age' => 22, 'gender' => 'male'),
    array('name' => 'Alice', 'age' => 27, 'gender' => 'female'),
    array('name' => 'Mark', 'age' => 23, 'gender' => 'male'),
    array('name' => 'Lisa', 'age' => 28, 'gender' => 'female')
);

$res = array_reduce($arr, function($carry, $item){
    $key = $item['gender'];
    isset($carry[$key]) ? array_push($carry[$key], $item) : $carry[$key] = array($item);
    return $carry;
}, array());

print_r($res);

以上代码将根据gender键值,将原始数组分组为两个子数组,其中一个包含所有female的元素,另一个包含所有male的元素。输出结果为:

Array
(
    [male] => Array
        (
            [0] => Array
                (
                    [name] => John
                    [age] => 21
                    [gender] => male
                )

            [1] => Array
                (
                    [name] => Bob
                    [age] => 22
                    [gender] => male
                )

            [2] => Array
                (
                    [name] => Mark
                    [age] => 23
                    [gender] => male
                )

        )

    [female] => Array
        (
            [0] => Array
                (
                    [name] => Jane
                    [age] => 25
                    [gender] => female
                )

            [1] => Array
                (
                    [name] => Alice
                    [age] => 27
                    [gender] => female
                )

            [2] => Array
                (
                    [name] => Lisa
                    [age] => 28
                    [gender] => female
                )

        )

)

以下是另一个示例,它根据age键值将数组分为3个子数组,分别存储小于20岁的人、20岁到25岁的人、以及25岁以上的人:

$arr = array(
    array('name' => 'John', 'age' => 21, 'gender' => 'male'),
    array('name' => 'Jane', 'age' => 25, 'gender' => 'female'),
    array('name' => 'Bob', 'age' => 22, 'gender' => 'male'),
    array('name' => 'Alice', 'age' => 27, 'gender' => 'female'),
    array('name' => 'Mark', 'age' => 23, 'gender' => 'male'),
    array('name' => 'Lisa', 'age' => 28, 'gender' => 'female'),
    array('name' => 'Tom', 'age' => 18, 'gender' => 'male'),
    array('name' => 'Lucy', 'age' => 19, 'gender' => 'female'),
    array('name' => 'Jack', 'age' => 30, 'gender' => 'male')
);

$res = array_reduce($arr, function($carry, $item){
    $key = $item['age'] < 20 ? 'young' : ($item['age'] < 25 ? 'middle' : 'old');
    isset($carry[$key]) ? array_push($carry[$key], $item) : $carry[$key] = array($item); 
    return $carry;
}, array());

print_r($res);

以上代码将根据age键值,将原始数组分为3个子数组,其中一个包含所有小于20岁的元素,另一个包含所有20岁到25岁的元素,第三个包含所有25岁以上的元素。输出结果为:

Array
(
    [middle] => Array
        (
            [0] => Array
                (
                    [name] => John
                    [age] => 21
                    [gender] => male
                )

            [1] => Array
                (
                    [name] => Bob
                    [age] => 22
                    [gender] => male
                )

            [2] => Array
                (
                    [name] => Mark
                    [age] => 23
                    [gender] => male
                )

        )

    [old] => Array
        (
            [0] => Array
                (
                    [name] => Alice
                    [age] => 27
                    [gender] => female
                )

            [1] => Array
                (
                    [name] => Lisa
                    [age] => 28
                    [gender] => female
                )

            [2] => Array
                (
                    [name] => Jack
                    [age] => 30
                    [gender] => male
                )

        )

    [young] => Array
        (
            [0] => Array
                (
                    [name] => Tom
                    [age] => 18
                    [gender] => male
                )

            [1] => Array
                (
                    [name] => Lucy
                    [age] => 19
                    [gender] => female
                )

        )

)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP 根据key 给二维数组分组 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 我的论坛源代码(八)

    下面是关于“我的论坛源代码(八)”的完整攻略: 介绍 “我的论坛源代码(八)”是一篇文章,作者在其中分享了自己编写的一个基于Python和Flask框架的论坛应用的源代码。代码包含了用户注册、登录、发布帖子等论坛常见功能,可以帮助初学者更好地理解和学习Web应用的开发。 使用方法 安装依赖 在使用本应用之前,你需要先安装必要的依赖库。可以通过以下命令来安装:…

    PHP 2023年5月30日
    00
  • PHP生成短网址的思路以及实现方法的详解

    针对“PHP生成短网址的思路以及实现方法的详解”的问题,我将进行如下的完整阐述: 1. 思路 网站的短网址生成通常采用 URL 缩短算法。这个算法的基本思路就是把长网址映射成一个短的字符串存储在数据库中,然后通过访问这个短字符串来跳转至原始 URL 地址。 下面是具体的实现思路: 先定义一个长短网址转换的函数,该函数接收一个长网址参数,并返回一个新的短网址。…

    PHP 2023年5月27日
    00
  • php实现的证件照换底色功能示例【人像抠图/换背景图】

    下面是完整攻略。 步骤一:准备工作 首先,我们需要一个能运行PHP脚本的环境。推荐使用XAMPP,它是一个集成了Apache、MySQL、PHP、phpMyAdmin等工具的集成环境,可以在本地搭建PHP服务。 其次,我们还需要下载一些工具和文件,包括: 用于进行人像抠图和换背景的PS软件; 一张需要抠图的证件照片; 一张自定义的纯色背景图片; 实现人像抠图…

    PHP 2023年5月26日
    00
  • php 根据URL下载远程图片、压缩包、pdf等文件到本地

    为实现根据URL下载远程图片、压缩包、PDF等文件到本地,需要分三个步骤完成。 步骤一:获取文件资源 这一步需要通过 PHP 提供的 CURL 扩展,发送 HTTP 请求,获取文件资源。在使用 CURL 扩展时,需要设置一些请求参数,如请求的 URL、请求方式(GET 或 POST)、请求头等。 以下是一个获取远程图片文件资源的示例: $url = ‘htt…

    PHP 2023年5月26日
    00
  • php增删改查示例自己写的demo

    下面我将为您详细讲解“php增删改查示例自己写的demo”的完整攻略。 1. 初步搭建环境 首先,我们需要搭建一个PHP开发环境,例如使用Apache服务器和MySQL数据库。您可能需要安装相关工具和扩展,例如PHP、MySQL、phpMyAdmin等。搭建好环境后,您可以创建一个用于测试的MySQL数据库,并创建一个名为“demo”的数据表: CREATE…

    PHP 2023年5月24日
    00
  • php实时倒计时功能实现方法详解

    下面将详细讲解“php实时倒计时功能实现方法详解”的完整攻略。 1. 基础知识 在实现实时倒计时功能之前,我们需要先掌握一些基础知识。我们需要使用PHP、JavaScript来实现。 PHP:一种脚本语言,通常用于Web开发,可以与HTML相互嵌套使用;JavaScript:一种脚本语言,可以在Web页面中嵌入,并且可以提供页面交互功能。 我们将使用PHP作…

    PHP 2023年5月27日
    00
  • PHP也能干大事之PHP中的编码解码详解

    PHP也能干大事之PHP中的编码解码详解 1. 什么是编码和解码? 在网络通信过程中,我们经常需要将数据从一种格式转换为另一种格式。编码和解码就是其中的两个重要过程。编码是将数据从一种表示形式转换为另一种表示形式的过程,而解码则是将已编码的数据重新转换成原来的表示形式。 在PHP中,有许多对编码和解码的支持。接下来,我们来详细讲解几种常见的编码和解码方式及其…

    PHP 2023年5月23日
    00
  • PHP多人模块开发原理解析

    PHP多人模块开发原理解析 1. 前言 在网站或系统开发中,多人协作是非常常见的情景。为了方便多人协作,我们经常会把代码通过模块化的方式进行开发。在PHP中,使用面向对象编程思想和PHP的命名空间等机制可以比较容易地实现多人协作开发,本文将从以下几个方面进行讲解: 面向对象编程思想 PHP的命名空间机制 多人模块开发实现示例 模块之间的调用示例 2. 面向对…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部