PHP 根据key 给二维数组分组

为了根据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日

相关文章

  • 优化php效率,提高php性能的一些方法

    优化PHP效率,提高PHP性能的一些方法 PHP作为一种开源语言,通常使用在WEB应用程序中,因为其简单易学、易用、易扩展等特点,已经成为开发人员选择的主流语言之一。然而,由于PHP的动态解释型、简单易学等特点,其性能相对较弱,需要一些方法和技巧来提高性能,使其更快、更有效率地运行。以下是一些优化PHP效率、提高PHP性能的方法: 1. 减少文件包含 在PH…

    PHP 2023年5月23日
    00
  • php中的四舍五入函数代码(floor函数、ceil函数、round与intval)

    下面是关于PHP中四舍五入函数的详细攻略。 floor函数 floor函数是PHP中的向下取整函数。它接受一个参数,即需要进行取整的数值。本函数的作用是将该数值向下取整到最接近的整数。 下面是一个使用floor函数的示例: $num1 = 7.8; $num2 = -3.5; echo floor($num1); // 输出7 echo floor($num…

    PHP 2023年5月26日
    00
  • php多个文件及图片上传实例详解

    PHP多个文件及图片上传实例详解 本文将详细讲解PHP多个文件及图片上传的过程,使读者能够了解如何使用PHP编写上传文件的功能。主要内容包括: 表单上传方式 Ajax异步上传方式 文件大小限制、类型限制 上传进度条显示 1. 表单上传方式 表单上传方式是最常用的文件上传方式,其基本原理是利用 标签的enctype属性来指定表单数据的编码类型,将数据以二进制形…

    PHP 2023年5月26日
    00
  • php截取中文字符串不乱码的方法

    完整攻略:php截取中文字符串不乱码的方法 在php中,由于中文字符的编码问题,普通的字符串截取方法会导致中文字符乱码。那么,如何才能截取中文字符串又不会乱码呢?以下是一些解决方法。 一、使用mb_substr()函数截取字符串 mb_substr()函数是php内置的截取字符串的函数,它可以适应不同编码的中文字符,不会出现乱码问题。具体用法如下: $str…

    PHP 2023年5月26日
    00
  • scratch编程怎么添加文本? scratch插入文字的教程

    添加文本是Scratch编程中的一项基础操作。我们可以使用Scratch中的文本块来向舞台、角色和其他对象添加文本。下面是如何在Scratch中添加文本的详细攻略: 步骤1:打开Scratch编辑器 首先,需要打开Scratch编辑器。可以使用Scratch官网提供的在线编辑器 (https://scratch.mit.edu/projects/editor…

    PHP 2023年5月30日
    00
  • Windows Server 2016 服务器配置指南之PHP7运行环境搭建方法

    Windows Server 2016 服务器配置指南之PHP7运行环境搭建方法 概述 在Windows Server 2016服务器上搭建PHP7运行环境可以为服务器增加动态网页处理功能。此文将介绍如何在Windows Server 2016上搭建PHP7运行环境。 步骤 第一步:下载PHP7安装包 从PHP官网(https://windows.php.n…

    PHP 2023年5月24日
    00
  • php 将字符串按大写字母分隔成字符串数组

    要将一个字符串按照大写字母进行分割,可以使用 PHP 内置函数 preg_split() 结合正则表达式来实现。 以下是实现的步骤: 1. 使用正则表达式匹配大写字母进行分隔 使用正则表达式 /(?=[A-Z])/ 可以匹配所有大写字母前面的位置。使用 PHP 函数 preg_split() 对字符串进行分割,参数一是正则表达式,参数二是需要分割的字符串,返…

    PHP 2023年5月26日
    00
  • PHP实现多维数组转字符串和多维数组转一维数组的方法

    一、多维数组转字符串: 在PHP中实现多维数组转字符串的方法有如下两种: 1.递归方法 //递归遍历方法实现多维数组转字符串 function arrToStr($arr){ $str = ”; foreach($arr as $key=>$val){ if(is_array($val)){ $str.= arrToStr($val);//再次调用a…

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