php 多维数组相同键值处理合并
一、前言
在实际情况中,有时需要针对多维数组相同键值作相应的处理(四则运算、比较大小等)后才能够使用到实际情况中,现给出三维数组(多维数组可相应拓展)任意多个相同键值处理的函数,以备查阅。
二、代码
<?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 多维数组相同键值处理合并的更多相关文章
- PHP 按二维数组的键值排序
/** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...
- PHP二维数组按照键值排序
在开发过程中,我们常常需要对二维数组按照数组的某个键来排序,这里提供两个封装好的方法,可以放到公共函数模块里以后需要的时候直接调用即可. /** * 二维数组按照键值降序排序 * @param arr ...
- php二维数组按照键值排序的方法
//按照传入数组中的num倒序 public function numdesc($array,$key="num",$order="desc"){ $arr_n ...
- PHP 二维数组去掉重复值并保持原结构
PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...
- 使用一个for循环将N*N的二维数组的所有值置1
<?php // 使用一个for循环将N*N的二维数组的所有值置1 $n = ; $a = []; ;$i<$n*$n;$i++){ $a[$i/$n][$i%$n] = ; } prin ...
- php方法----将数组按照键值进行排序
将数组按照键值进行排序 array_multisort(array_column($arr,'first'),SORT_ASC,$arr);
- php数组根据某一个键值,把相同键值的合并生成一个新的二维数组
http://blog.csdn.net/xyzchenxiaolin/article/details/51700485 源数据: $infos = array( array( 'a' => 3 ...
- php 多维数组指定某个值作为键
$temp_key = array_column($mobile_arr,'cidf'); //键值 $mobile_arr = array_combine($temp_key,$mobile_arr ...
- php二维数组修改键名
最近遇到一个问题,是关于json数据提交的时候,总是报出[object object]的错误,查了晚上需要资料,大部分的说法是json数据格式不规范导致的错误.一般建议说将dataType类型注释掉. ...
随机推荐
- 11.C#中的转义符和@符号的作用
转义符 转义符是指一个'\'+一个特殊的字符,组成的一个具有特殊意义的字符. \n: 表示换行. namespace _11.转义符 { class Program { static void Ma ...
- 大话java基础知识一之为什么java的主函数入口必须是public static void
为什么java的主函数入口必须是public static void main (String[] args); 很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么 ...
- canvas剪辑区域
- poi3.8随记
System.out.println(sheet.getFirstRowNum());//结果是0 System.out.println(sheet.getLastRowNum());//如果一共有3 ...
- 测试驱动开发(TDD)及测试框架Mocha.js入门学习
组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅 ...
- Extjs4几个小知识点
1.Why user "var me=this" in Extjs4?有个英文解释很好: Say you have a method in your object A which ...
- 使用md5的密码加密,处理用户的密码
需求 1.新增用户保存:使用md5的密码加密,如果用户没有填写密码,设置初始密码“123”: 2.修改用户保存:使用md5的加密加密 *如果修改了密码,需要进行md5的密码加密: *如果没有修改密码, ...
- ubuntu 安装 deb 软件包
参考链接地址 blog.csdn.net/kevinhg/article/details/5934462 sudo dpkg -i xxxx.deb 安装一个 Debian 软件包,如你手动下载的文件
- Linux高性能server编程——定时器
版权声明:本文为博主原创文章.未经博主允许不得转载. https://blog.csdn.net/walkerkalr/article/details/36869913 定时器 服务器程序通常管 ...
- 抽象类和final
抽象类: 概念:在继承过程中,形成一个继承金字塔,位于金字塔底部的类越来越具体(强大),位于塔顶的越来越抽象(简单). 关键字 :abstract 抽象类特性: [1]抽象类过于抽象,实例化后无语义 ...