一、前言

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

二、代码

 <?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. 对于ESP、EBP寄存器的理解

    原文:http://blog.csdn.net/yeruby/article/details/39780943 esp是栈指针,是cpu机制决定的,push.pop指令会自动调整esp的值: ebp只 ...

  2. 位运算(1)——Hamming Distance

    https://leetcode.com/problems/hamming-distance/#/description 输入:两个整数x,y,且0 ≤ x, y < 231. 输出:x,y的二 ...

  3. Sharepoint2010新建一个用户的方法

    最近在做关于SharePoint的相关开发,在开发中需要用到测试用户进行相关权限的测试,所以就需要创建一个新的用户进行,但是在网上找了很久都没有找到关于创建一个新用户的资料,最后终于在http://w ...

  4. php赋值运算符

    = 赋值 += $x+=3相当于$x = $x+3; -= *= /+ %= .=

  5. 使用Ribbon Workbench来修改停用、激活按钮的权限

    在实施的过程中,有时会遇到客户为了管控使用人员的操作或防止使用人员通过停用后再激活来绕开部分逻辑,需要对激活.停用按钮赋予单独的权限.但很遗憾,在Dyanmics CRM中,并没有把停用.激活按钮单独 ...

  6. tcpdump确认服务器连接的交换机信息

    Displaying CDP info via tcpdump or snoop Cisco Discovery Protocol is a management protocol that Cisc ...

  7. Arcgis for Js之鼠标经过显示对象名的实现

    在浏览地图时,移动鼠标经过某个对象或者POI的时候,能够提示该对象的名称对用户来说是很实用的,本文讲述在Arcgis for Js中,用两种不同的方式来实现该效果. 为了有个直观的概念,先给大家看看实 ...

  8. java之Socket多线程传递对象

    服务器端利用线程池回复客户端: public class Server implements Runnable { private final ServerSocket server; private ...

  9. ModuleNotFoundError: No module named 'yaml'

    ModuleNotFoundError: No module named 'yaml' 需要安装 pyyaml 包

  10. SINAMICS S120屏蔽报警

    通用的报警屏蔽方法: P2118 = 需要屏蔽的报警号 P2119 = 屏蔽的方式