一、前言

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

二、代码

 <?php
//任意多个相同键值的数组合并
//预先将所要合并的数组组装成一个新的数组 $arr = array(
'1' => array(
'1' => array(
"channelName" => "渠道1",
"firstRegisterTime" => "2018-12-20 10:23:57",
"firstChargeNum" => 168,
),
'2' => array(
"channelName" => "渠道2",
"firstRegisterTime" => "2018-12-20 10:23:57",
"firstChargeNum" => 127,
),
'3' => array(
"channelName" => "渠道3",
"firstRegisterTime" => "2018-12-10 11:23:57",
"firstChargeNum" => 69,
),
),
'2' => array(
'1' => array(
"channelName" => "渠道1",
"firstRegisterTime" => "2017-12-29 10:23:57",
"firstChargeNum" => 798,
),
'2' => array(
"channelName" => "渠道2",
"firstRegisterTime" => "2018-12-20 10:23:57",
"firstChargeNum" => 985,
),
'3' => array(
"channelName" => "渠道3",
"firstRegisterTime" => "2017-12-20 11:23:57",
"firstChargeNum" => 54,
),
),
);
print_r($arr);
$result = arr_format($arr);
print_r($result); /**
* [comm_sumarrs 多维数组相同键值处理合并]
* @param [array] $data [原始数据]
* @return [array] $res [合并完数据]
*
*/
function arr_format($arr){
$res = array();
// 三维数组,循环三次(foreach)
foreach ( $arr as $key => $value ) {
foreach( $value as $k=>$v ){
foreach ( $v as $k1 => $v1 ) { // 循环具体键值
if ( isset($res[$k][$k1]) ){
if ( $k1 == 'firstRegisterTime' ) { // 相同键值时间戳比较,更新为最早的
if( strtotime($v1) < strtotime($res[$k][$k1]) ){
$res[$k][$k1] = $v1;
}
}
if ( $k1 == 'firstChargeNum' ) { // 相同键值相加
$res[$k][$k1] += $v1;
}
}else{
$res[$k][$k1] = $v1;
}
}
}
}
return $res;
} ?>

三、运行结果

处理前数组:

 Array
(
[1] => Array
(
[1] => Array
(
[channelName] => 渠道1
[firstRegisterTime] => 2018-12-20 10:23:57
[firstChargeNum] => 168
) [2] => Array
(
[channelName] => 渠道2
[firstRegisterTime] => 2018-12-20 10:23:57
[firstChargeNum] => 127
) [3] => Array
(
[channelName] => 渠道3
[firstRegisterTime] => 2018-12-10 11:23:57
[firstChargeNum] => 69
) ) [2] => Array
(
[1] => Array
(
[channelName] => 渠道1
[firstRegisterTime] => 2017-12-29 10:23:57
[firstChargeNum] => 798
) [2] => Array
(
[channelName] => 渠道2
[firstRegisterTime] => 2018-12-20 10:23:57
[firstChargeNum] => 985
) [3] => Array
(
[channelName] => 渠道3
[firstRegisterTime] => 2017-12-20 11:23:57
[firstChargeNum] => 54
) ) )

处理后数组:

Array
(
[1] => Array
(
[channelName] => 渠道1
[firstRegisterTime] => 2017-12-29 10:23:57
[firstChargeNum] => 966
) [2] => Array
(
[channelName] => 渠道2
[firstRegisterTime] => 2018-12-20 10:23:57
[firstChargeNum] => 1112
) [3] => Array
(
[channelName] => 渠道3
[firstRegisterTime] => 2017-12-20 11:23:57
[firstChargeNum] => 123
) )

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. xml schema数据类型

    1.简单数据类型 (1)内置简单数据类型 schema中定义了一些简单数据类型,包括primitive原始数据类型和derived派生数据类型,这些类型都是schema中使用的 最基本的数据类型,我们 ...

  2. Value cannot be null. Parameter name: source

    下图主要想说.net抛错后的优先级, 错误1是根本原因,排第一位: 错误2里的方法包含了错误1,排第二位: 错误3就是整个Action了. 类似这样的错误,按照这样的顺序来解决bug,相信很受用.

  3. 通用代码——makefile文件

    ver=debug ifeq ($(ver),debug) TARGET = testmain_d FLAG=-g -D debug else TARGET = testmain_r FLAG=-O3 ...

  4. [LeetCode]11. Container With Most Water 盛最多水的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  5. fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)(转)

    fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤) Fiddler 有一个filters可以很好的帮助我们只显示我们关系的请求或 ...

  6. Eclipse + Tomcat 环境下配置 JSTL 标签

    1.下载 jar 包. 网址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 2.解压后将jstl.jar和stan ...

  7. 探讨下在Delphi里面进程之间的数据共享

    进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元.现在小编就和大家来探讨一下在Delphi ...

  8. mysql 5.6 zip安装,启动失败,1067错误

    在使用mysql5.6 zip压缩包安装mysql过程中,启动过程,老是卡在1067启动错误上,翻看网上各种解决方案,卸载干净重装,重启,都不管用. 网上各种教程都是新建 my.ini mysql 配 ...

  9. CRM, C4C和Hybris的工作流简介

    CRM的例子 Step by Step to debug IC inbox workflow WS14000164 C4C Custom recipient determination in work ...

  10. Selenium入门12 鼠标和键盘事件

    1 鼠标 集成在webdriver.ActionChains.单击.双击.右击.拖放等等.   2 键盘 引入包from selenium.webdriver.common.keys import K ...