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桌面中心(二) 数据库写入
Mar 11 PHP
优化使用mysql存储session的php代码
Jan 10 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP删除数组中空值的方法介绍
Apr 14 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
php实现建立多层级目录的方法
Jul 19 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
33道php常见面试题及答案
Jul 06 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
在Laravel 中实现是否关注的示例
Oct 22 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
php微信公众号开发模式详解
2016/11/28 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
js资料prototype 属性
2007/03/13 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
javascript读写json示例
2014/04/11 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python启动应用程序和终止应用程序的方法
2019/06/28 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
机械专业毕业生推荐信范文
2013/11/25 职场文书
法律七进实施方案
2014/03/15 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
读书笔记格式
2015/07/02 职场文书
七个Python必备的GUI库
2021/04/27 Python
MySQL连接控制插件介绍
2021/09/25 MySQL
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python