0

0

php 二维数组以某一键名进行分组相加

php中文网

php中文网

发布时间:2016-06-13 09:51:58

|

1269人浏览过

|

来源于php中文网

原创

本文章来给各位同学介绍一篇关于php 二维数组以某一键名进行分组相加实例程序,希望此教程对各位同学会有所帮助。

如题,如果是从数据库里取数据的时候大可以

SELECT SUM(t_value),t_id FROM t_table GROUP BY t_id

但是如果是在php程序中处理类似的问题就稍微麻烦点了,这里给个函数就是处理类似的问题

 代码如下 复制代码

/* 函数功能:对二维数组以某一键名进行分组相加,返回新的二维数组 

立即学习PHP免费学习笔记(深入)”;

 * 参数说明:$arr-源数组;$new_arr-相加后得到的新数组;$target_key-要分组的键名 

 */

function add_array($arr, &$new_arr, $target_key) { 

    $num = count($new_arr); //计算新数组的大小,新数组也是二维的,这里计算的是第一维 

    for ($i = 0; $i

        //循环新数组 

        //if块主要判断当前分组的键名是否已经存在于新数组中,避免重复 

        //由于该函数是被循环调用的,而新数组可能有多于1个的元素,所以必须对新数组中的每一个元素都进行比较, 

        //新数组的元素是一个一维数组,$i动态的比较新的二维数组中的分组键名 

        if ($arr[$target_key] != $new_arr[$i][$target_key]) {//判断新数组中的分组键名是否跟当前源数组中的分组键名相等 

            $cmp_num++; //如果不相等,比较次数自增1 

        } else {//如果相等,说明当前分组键名已经存在 

            $tar_exist = true; //设置存在标识为true 

            $tar_key = $i; //返回当前分组键名在新数组中的数字索引 

            break; //跳出循环 

        } 

    } 

    //如果比较次数跟新数组大小一样,说明当前分组键名不在新数组中,设置存在标识为false 

    if ($cmp_num == $num) 

        $tar_exist = false; 

    if ($tar_exist) {//如果分组键名已经存在,对该分组的数组元素进行相加 

        foreach ($arr as $key => $value) { 

            if ($key != $target_key) {//分组键名对应的元素值不相加 

                $new_arr[$tar_key][$key]+=$value; //其余的元素值进行相加 

晓语台
晓语台

晓语台,是一款AI文本创作产品。创作能力主要围绕营销文本的AI创作,晓语台覆盖了品牌与市调、商业媒体、社交媒体、搜索营销、数字广告、职场办公共六类全营销文本

下载

            } 

        } 

    } else { 

        //如果分组键名不存在 

        //设置新的分组键名,并对该分组的数组元素进行相加 

        //新数组的第一维使用$num参数来分辨当前分组的秩序 

        //由于$num实际上就是新数组中,按键名分组的个数,并且是从0开始,所以新的分组在新数组中的索引直接用$num即可, 

        //而不须要$num+1 

        $new_arr[$num][$target_key] = $arr[$target_key]; 

        foreach ($arr as $key => $value) { 

            if ($key != $target_key) {//分组键名对应的元素值不相加 

                $new_arr[$num][$key]+=$value; //其余的元素值进行相加 

            } 

        } 

    } 

$arr = array( 

    array('group_id' => 13, 'team_price' => 88.00, 'satopay_price' => 85.00, 'team_id' => 348, 'origin' => 440, 'gain' => 14.45, 'quantity' => 5), 

    array('group_id' => 13, 'team_price' => 12.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 36, 'gain' => 2.76, 'quantity' => 3), 

    array('group_id' => 14, 'team_price' => 4.99, 'satopay_price' => 4.60, 'team_id' => 335, 'origin' => 4.99, 'gain' => 0.31915, 'quantity' => 1), 

    array('group_id' => 14, 'team_price' => 12.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84, 'quantity' => 2), 

    array('group_id' => 15, 'team_price' => 13.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84, 'quantity' => 2), 

); 

$new_arr = array(); 

foreach ($arr as $key => $value) { 

    add_array($value, &$new_arr, 'group_id'); //这里我们按group_id进行分组相加 

var_dump($new_arr);

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号