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 相关文章推荐
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP中将数组转成XML格式的实现代码
Aug 08 PHP
PHP加密解密字符串汇总
Apr 26 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
PHP底层运行机制与工作原理详解
Jul 31 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
linux下php上传文件注意事项
2016/06/11 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
基于jquery的无刷新分页技术
2011/06/11 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
详解Python中DOM方法的动态性
2015/04/11 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
详解python运行三种方式
2019/05/13 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
经销商培训邀请函
2014/01/21 职场文书
农民工讨薪标语
2014/06/26 职场文书
2014年度思想工作总结
2014/11/27 职场文书
市场部岗位职责
2015/02/12 职场文书
小升初自荐信范文
2015/03/05 职场文书