一、前言

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

二、代码

 <?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. python的数字

    1.整数 与其它语言不同点两个乘号(**)代表 乘方运算 .前面代表底数,后面代表指数. 2.浮点数 它的小数位数可能是不确定的,需要注意 3.使用str()避免错误 在输出字符串时,可以避免类型错误 ...

  2. JSP中的<%%>,<%! %>,<%= %>,<%-- --%>

    <%  %>             添加java代码 <%!   %>   添加java方法 <%= %>    将变量或表达式输出到页面 <%--   - ...

  3. SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] was not registered for synchronization because synchronization is not active

    Creating a new SqlSessionSqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1fa5519] w ...

  4. 将pugixml库编译成动态库的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 pugixml库默认是编译成静态库的.要把pugixml库编译成一个动态库,需要对代码做一些修改,具体是将 // If ...

  5. 【起航计划 007】2015 起航计划 Android APIDemo的魔鬼步伐 06 App->Activity->Forwarding Activity启动另外一个Activity finish()方法

    Android应用可以包含多个Activity,某个Activity可以启动另外的Activity. 这些Activity采用栈结构来管理,新打开的Activity叠放在当前的Activity之上,当 ...

  6. Struts2_HelloWorld_3

    struts.xml的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...

  7. Java —类和对象

    类和对象 类是对象的类型,是具有相同的属性和方法的一组对象的集合. 定义类 访问修饰符 class 类名 { 数据类型 属性名: 访问修饰符 返回值类型 方法名 {} } 创建对象:类名 对象名 = ...

  8. NWERC 2013 - J (codeforces gym - 100405J)

    题目描述:给你一颗二叉树,保证每个点要么是叶子节点,要么有左右两个儿子.某些叶子节点上放着灯,请你移动最少的灯,使得整棵树平衡 对平衡的定义:对于树上的每个点左右儿子中灯数的差的绝对值≤1,那么这棵树 ...

  9. ERP和C4C中的function location

    SAP ERP里的Functional Locations,下载到SAP Cloud for Customer后成为类型为'Functional Location'的Installation Poin ...

  10. cesium 动态水面效果

    后续继续更新