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类型注释掉. ...
随机推荐
- C#本期本周的算法
C#根据当前时间获取,本周,本月,本季度等时间段 DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Conve ...
- Hibernate系列3-----之修改
只是修改测试类,先看其他的代码的同学,请翻看我的博客Hibernate1,嘿嘿,我就在这不在重写一遍来 @Test public void testhibernate() { updateStuden ...
- Objective-C #define 用法解析 (转)
原文地址: http://blog.csdn.net/kindazrael/article/details/8108868 Objective-C : #define 用法解析 在 C 语言中,预处理 ...
- 在CentOS的profile文件中配置环境变量
# idea jdk7 settings start #JAVA_HOME=/usr/local/jdk/jdk1.7.0_79 #JRE_HOME=$JAVA_HOME/jre #PATH=$PAT ...
- HTML标签_1
<meta charset="utf-8" /> 设置字符集 <meta name="description" content="这 ...
- 关于css实现单行、多行省略标记
实现单行: overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 实现多行: display: -webkit-box; -we ...
- 掌握这些技能玩转iOS
近一年来,苹果iOS/OS X频繁被爆出重大安全漏洞,攻击者可以通过漏洞窃取多达上千个应用的密码.这些漏洞一旦被黑客掌握.利用,后果不堪设想. 好在这些漏洞的发现者还是有节操的,他们都将这些漏洞汇报给 ...
- 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. 你会明白 ...
- IOS 纯代码添加 Button Image Label 添加到自定义View中
@interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *apps; @end @imple ...
- 1.08 在select语句使用条件逻辑
问题:要在select语句中,对数值执行if-else操作.例如,要产生一个结果集,如果一个员工工资小于等于2000美金,就返回消息”underpaid”:如果大于等于4000美金:就返回消息”ove ...