php二维数组用键名分组相加实例函数


Posted in PHP onNovember 06, 2013

本文介绍一篇关于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 < $num; $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; //其余的元素值进行相加 
            } 
        } 
    } 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 a simple smtp class
Nov 26 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
解析php取整的几种方式
Jun 25 PHP
在PHP中使用redis
Nov 04 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
Symfony控制层深入详解
Mar 17 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
php不用正则验证真假身份证
Nov 06 #PHP
php 中文字符串首字母的获取函数分享
Nov 04 #PHP
PHP图片上传代码
Nov 04 #PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 #PHP
php Session存储到Redis的方法
Nov 04 #PHP
在PHP中使用redis
Nov 04 #PHP
6种php上传图片重命名的方法实例
Nov 04 #PHP
You might like
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
解读ES6中class关键字
2017/11/20 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python如何实现转换URL详解
2019/07/02 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
婚前保证书
2014/04/29 职场文书
求职信标题怎么写
2014/05/26 职场文书
药剂专业自荐书
2014/06/20 职场文书
个人事迹材料范文
2014/12/29 职场文书
财产保全担保书
2015/01/20 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers