一、前言

在实际情况中,有时需要针对多维数组相同键值作相应的处理(四则运算、比较大小等)后才能够使用到实际情况中,现给出三维数组(多维数组可相应拓展)任意多个相同键值处理的函数,以备查阅。

二、代码

  1. <?php
  2. //任意多个相同键值的数组合并
  3. //预先将所要合并的数组组装成一个新的数组
  4.  
  5. $arr = array(
  6. '1' => array(
  7. '1' => array(
  8. "channelName" => "渠道1",
  9. "firstRegisterTime" => "2018-12-20 10:23:57",
  10. "firstChargeNum" => 168,
  11. ),
  12. '2' => array(
  13. "channelName" => "渠道2",
  14. "firstRegisterTime" => "2018-12-20 10:23:57",
  15. "firstChargeNum" => 127,
  16. ),
  17. '3' => array(
  18. "channelName" => "渠道3",
  19. "firstRegisterTime" => "2018-12-10 11:23:57",
  20. "firstChargeNum" => 69,
  21. ),
  22. ),
  23. '2' => array(
  24. '1' => array(
  25. "channelName" => "渠道1",
  26. "firstRegisterTime" => "2017-12-29 10:23:57",
  27. "firstChargeNum" => 798,
  28. ),
  29. '2' => array(
  30. "channelName" => "渠道2",
  31. "firstRegisterTime" => "2018-12-20 10:23:57",
  32. "firstChargeNum" => 985,
  33. ),
  34. '3' => array(
  35. "channelName" => "渠道3",
  36. "firstRegisterTime" => "2017-12-20 11:23:57",
  37. "firstChargeNum" => 54,
  38. ),
  39. ),
  40. );
  41. print_r($arr);
  42. $result = arr_format($arr);
  43. print_r($result);
  44.  
  45. /**
  46. * [comm_sumarrs 多维数组相同键值处理合并]
  47. * @param [array] $data [原始数据]
  48. * @return [array] $res [合并完数据]
  49. *
  50. */
  51. function arr_format($arr){
  52. $res = array();
  53. // 三维数组,循环三次(foreach)
  54. foreach ( $arr as $key => $value ) {
  55. foreach( $value as $k=>$v ){
  56. foreach ( $v as $k1 => $v1 ) { // 循环具体键值
  57. if ( isset($res[$k][$k1]) ){
  58. if ( $k1 == 'firstRegisterTime' ) { // 相同键值时间戳比较,更新为最早的
  59. if( strtotime($v1) < strtotime($res[$k][$k1]) ){
  60. $res[$k][$k1] = $v1;
  61. }
  62. }
  63. if ( $k1 == 'firstChargeNum' ) { // 相同键值相加
  64. $res[$k][$k1] += $v1;
  65. }
  66. }else{
  67. $res[$k][$k1] = $v1;
  68. }
  69. }
  70. }
  71. }
  72. return $res;
  73. }
  74.  
  75. ?>

三、运行结果

处理前数组:

  1. Array
  2. (
  3. [1] => Array
  4. (
  5. [1] => Array
  6. (
  7. [channelName] => 渠道1
  8. [firstRegisterTime] => 2018-12-20 10:23:57
  9. [firstChargeNum] => 168
  10. )
  11.  
  12. [2] => Array
  13. (
  14. [channelName] => 渠道2
  15. [firstRegisterTime] => 2018-12-20 10:23:57
  16. [firstChargeNum] => 127
  17. )
  18.  
  19. [3] => Array
  20. (
  21. [channelName] => 渠道3
  22. [firstRegisterTime] => 2018-12-10 11:23:57
  23. [firstChargeNum] => 69
  24. )
  25.  
  26. )
  27.  
  28. [2] => Array
  29. (
  30. [1] => Array
  31. (
  32. [channelName] => 渠道1
  33. [firstRegisterTime] => 2017-12-29 10:23:57
  34. [firstChargeNum] => 798
  35. )
  36.  
  37. [2] => Array
  38. (
  39. [channelName] => 渠道2
  40. [firstRegisterTime] => 2018-12-20 10:23:57
  41. [firstChargeNum] => 985
  42. )
  43.  
  44. [3] => Array
  45. (
  46. [channelName] => 渠道3
  47. [firstRegisterTime] => 2017-12-20 11:23:57
  48. [firstChargeNum] => 54
  49. )
  50.  
  51. )
  52.  
  53. )

处理后数组:

  1. Array
  2. (
  3. [1] => Array
  4. (
  5. [channelName] => 渠道1
  6. [firstRegisterTime] => 2017-12-29 10:23:57
  7. [firstChargeNum] => 966
  8. )
  9.  
  10. [2] => Array
  11. (
  12. [channelName] => 渠道2
  13. [firstRegisterTime] => 2018-12-20 10:23:57
  14. [firstChargeNum] => 1112
  15. )
  16.  
  17. [3] => Array
  18. (
  19. [channelName] => 渠道3
  20. [firstRegisterTime] => 2017-12-20 11:23:57
  21. [firstChargeNum] => 123
  22. )
  23.  
  24. )

php 多维数组相同键值处理合并的更多相关文章

  1. PHP 按二维数组的键值排序

    /** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...

  2. PHP二维数组按照键值排序

    在开发过程中,我们常常需要对二维数组按照数组的某个键来排序,这里提供两个封装好的方法,可以放到公共函数模块里以后需要的时候直接调用即可. /** * 二维数组按照键值降序排序 * @param arr ...

  3. php二维数组按照键值排序的方法

    //按照传入数组中的num倒序 public function numdesc($array,$key="num",$order="desc"){ $arr_n ...

  4. PHP 二维数组去掉重复值并保持原结构

    PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...

  5. 使用一个for循环将N*N的二维数组的所有值置1

    <?php // 使用一个for循环将N*N的二维数组的所有值置1 $n = ; $a = []; ;$i<$n*$n;$i++){ $a[$i/$n][$i%$n] = ; } prin ...

  6. php方法----将数组按照键值进行排序

    将数组按照键值进行排序 array_multisort(array_column($arr,'first'),SORT_ASC,$arr);

  7. php数组根据某一个键值,把相同键值的合并生成一个新的二维数组

    http://blog.csdn.net/xyzchenxiaolin/article/details/51700485 源数据: $infos = array( array( 'a' => 3 ...

  8. php 多维数组指定某个值作为键

    $temp_key = array_column($mobile_arr,'cidf'); //键值 $mobile_arr = array_combine($temp_key,$mobile_arr ...

  9. php二维数组修改键名

    最近遇到一个问题,是关于json数据提交的时候,总是报出[object object]的错误,查了晚上需要资料,大部分的说法是json数据格式不规范导致的错误.一般建议说将dataType类型注释掉. ...

随机推荐

  1. C#本期本周的算法

    C#根据当前时间获取,本周,本月,本季度等时间段 DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Conve ...

  2. Hibernate系列3-----之修改

    只是修改测试类,先看其他的代码的同学,请翻看我的博客Hibernate1,嘿嘿,我就在这不在重写一遍来 @Test public void testhibernate() { updateStuden ...

  3. Objective-C #define 用法解析 (转)

    原文地址: http://blog.csdn.net/kindazrael/article/details/8108868 Objective-C : #define 用法解析 在 C 语言中,预处理 ...

  4. 在CentOS的profile文件中配置环境变量

    # idea jdk7 settings start #JAVA_HOME=/usr/local/jdk/jdk1.7.0_79 #JRE_HOME=$JAVA_HOME/jre #PATH=$PAT ...

  5. HTML标签_1

    <meta charset="utf-8" /> 设置字符集 <meta name="description" content="这 ...

  6. 关于css实现单行、多行省略标记

    实现单行: overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 实现多行: display: -webkit-box; -we ...

  7. 掌握这些技能玩转iOS

    近一年来,苹果iOS/OS X频繁被爆出重大安全漏洞,攻击者可以通过漏洞窃取多达上千个应用的密码.这些漏洞一旦被黑客掌握.利用,后果不堪设想. 好在这些漏洞的发现者还是有节操的,他们都将这些漏洞汇报给 ...

  8. April 17 2017 Week 16 Monday

    You will find that it is necessary to let things go; simply for the reason that they are heavy. 你会明白 ...

  9. IOS 纯代码添加 Button Image Label 添加到自定义View中

    @interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *apps; @end @imple ...

  10. 1.08 在select语句使用条件逻辑

    问题:要在select语句中,对数值执行if-else操作.例如,要产生一个结果集,如果一个员工工资小于等于2000美金,就返回消息”underpaid”:如果大于等于4000美金:就返回消息”ove ...