php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值。其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了。很少碰到这种有一维数组又有二维数组的情况,先上代码:
$a = array(
0 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '15261', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
1 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '2', 'extension_number' => '66002', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
14 => array('target_id' => '22', 'target_type' => '1','phone_type' => '4', 'extension_number' => '56431', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
2 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
3 => array('target_id' => '25', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '07143', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
13 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '0', 'extension_number' => '96949', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
4 => array('target_id' => '26', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '94755', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
5 => array('target_id' => '30', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14171', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
6 => array('target_id' => '36', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
7 => array('target_id' => '42', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '31354', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
8 => array('target_id' => '43', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '66810', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
9 => array('target_id' => '45', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '34868', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
10 => array('target_id' => '50', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '79523', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
11 => array('target_id' => '149', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '59438', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
12 => array('target_id' => '806', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14780', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
);
$target = array();
$temp = array();
foreach ($a as $val) {
if (!empty($target)) {
if (in_array($val['target_id'], array_keys($target))) {
if (!empty($temp[$val['target_id']])) {
$target[$val['target_id']] = null;
$target[$val['target_id']][$temp[$val['target_id']]['phone_type']] = $temp[$val['target_id']];
$temp[$val['target_id']] = null;
}
$target[$val['target_id']][$val['phone_type']] = $val;
} else {
$temp[$val['target_id']] = $val;
$target[$val['target_id']] = $val;
}
} else {
$temp[$val['target_id']] = $val;
$target[$val['target_id']] = $val;
}
}
var_dump($target);exit;
这个返回的结果形如:
array
22 =>
array
1 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '15261' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
2 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '2' (length=1)
'extension_number' => string '66002' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
4 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '4' (length=1)
'extension_number' => string '56431' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
24 =>
array
1 =>
array
'target_id' => string '24' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '54876' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
0 =>
array
'target_id' => string '24' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '0' (length=1)
'extension_number' => string '96949' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
25 =>
array
'target_id' => string '25' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '07143' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
26 =>
array
'target_id' => string '26' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '94755' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
30 =>
array
'target_id' => string '30' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '14171' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
36 =>
array
'target_id' => string '36' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '54876' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
42 =>
array
'target_id' => string '42' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '31354' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
43 =>
array
'target_id' => string '43' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '66810' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
45 =>
array
'target_id' => string '45' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '34868' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
50 =>
array
'target_id' => string '50' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '79523' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
149 =>
array
'target_id' => string '149' (length=3)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '59438' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
806 =>
array
'target_id' => string '806' (length=3)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '14780' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
如果不想要生成的二维数组的key值,或者说再精简些,可以这样:
$a = array(
0 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '15261', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
1 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '2', 'extension_number' => '66002', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
14 => array('target_id' => '22', 'target_type' => '1','phone_type' => '4', 'extension_number' => '56431', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
2 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
3 => array('target_id' => '25', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '07143', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
13 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '0', 'extension_number' => '96949', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
4 => array('target_id' => '26', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '94755', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
5 => array('target_id' => '30', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14171', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
6 => array('target_id' => '36', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),
7 => array('target_id' => '42', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '31354', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
8 => array('target_id' => '43', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '66810', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
9 => array('target_id' => '45', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '34868', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
10 => array('target_id' => '50', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '79523', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
11 => array('target_id' => '149', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '59438', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
12 => array('target_id' => '806', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14780', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),
);
$target = array();
$temp = array();
foreach ($a as $val) {
if (!empty($target)) {
if (in_array($val['target_id'], array_keys($target))) {
if (!empty($temp[$val['target_id']])) {
$target[$val['target_id']] = null;
$target[$val['target_id']][] = $temp[$val['target_id']];
$temp[$val['target_id']] = null;
}
$target[$val['target_id']][] = $val;
} else {
$temp[$val['target_id']] = $val;
$target[$val['target_id']] = $val;
}
} else {
$temp[$val['target_id']] = $val;
$target[$val['target_id']] = $val;
}
}
var_dump($target);exit;
生成结果如:
array
22 =>
array
0 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '15261' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
1 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '2' (length=1)
'extension_number' => string '66002' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
2 =>
array
'target_id' => string '22' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '4' (length=1)
'extension_number' => string '56431' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
24 =>
array
0 =>
array
'target_id' => string '24' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '54876' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
1 =>
array
'target_id' => string '24' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '0' (length=1)
'extension_number' => string '96949' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
25 =>
array
'target_id' => string '25' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '07143' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
26 =>
array
'target_id' => string '26' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '94755' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
30 =>
array
'target_id' => string '30' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '14171' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
36 =>
array
'target_id' => string '36' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '54876' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => string '1' (length=1)
42 =>
array
'target_id' => string '42' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '31354' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
43 =>
array
'target_id' => string '43' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '66810' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
45 =>
array
'target_id' => string '45' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '34868' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
50 =>
array
'target_id' => string '50' (length=2)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '79523' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
149 =>
array
'target_id' => string '149' (length=3)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '59438' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
806 =>
array
'target_id' => string '806' (length=3)
'target_type' => string '1' (length=1)
'phone_type' => string '1' (length=1)
'extension_number' => string '14780' (length=5)
'phone_id' => string '1' (length=1)
'phone_number' => string '4008285599' (length=10)
'extension_special' => null
我这样写有些复杂,但是这种需求在网上很难搜到代码,所以自己贴一份,给大家审查下,看看还有什么更简单的方法实现,毕竟我的算法学的还是挺差的。欢迎指点讨论谢谢。
php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组的更多相关文章
- PHP二位数组按照数组的某个字段值排序
不多废话 直接代码 /** * @name 排序 按照数组的某个字段值排序 * @param $array 排序数组 $field 排序字段 $direction 排序顺序 * @author wan ...
- PHP 二维数组根据某个字段排序
二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数 一. 手写arraysort PHP的一维数组排序函数: sort 对数组的值按 ...
- js将一个具有相同键值对的一维数组转换成二维数组
这两天,一个前端朋友在面试的笔试过程中遇到了一道类似于"用js实现将一个具有相同code值的一维数组转换成相同code值在一起的二维数组"的题目.他面试过后,把这个问题抛给了我,问 ...
- php二维数组根据某个字段去重
php的二维数组根据某个字段去重,在这默认为二维数组的结构是一样的,现在根据二维数组里的id字段去重,把id相同的重复的元素去掉 /** * 二维数组根据某个字段去重 * @param array $ ...
- PHP二维数组按某个字段排序
//准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...
- PHP 二维数组根据某个字段按指定排序方式排序
/** * 二维数组根据某个字段按指定排序方式排序 * @param $arr array 二维数组 * @param $field string 指定字段 * @param int $sort_or ...
- extract_by_one 根据二维数组中某字段来提取数组信息,查看有无重复信息
public function tt(){ $param = array( array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70 ...
- 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序
从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...
- PHP中根据二维数组中某个字段实现排序
想要实现二维数组中根据某个字段排序,一般可以通过数组循环对比的方式实现.这里介绍一种更简单的方法,直接通过PHP函数实现.array_multisort() :可以用来一次对多个数组进行排序,或者根据 ...
随机推荐
- Pexpect--example--hive.py解读
python version 2.6.6 ; pexpect 2.3 login方法解读: def login (args, cli_username=None, cli_password=None) ...
- PHPstorm如何安装vue.js插件
1.什么是PHPstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.----来自百度百科 一句话:P ...
- python函数-------python2.7教程学习【廖雪峰版】(三)
任务: 看完函数这一章 已完成 2017年6月8日16:23:491.函数的作用:写较少的代码实现较多的功能,可以多次被调用.2.可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的 ...
- Lumen Repository(仓储)
在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离:http://laravelacademy.org/post/3063.html Eloquent: 集合:ht ...
- bash编程基础
bash变量 变量命名: 1.不能使用程序中的关键字(保留字) 2.只能使用数字.字母和下划线,且不能以数字开头 3.要见名知义 变量类型: 数值型:精确数值(整数),近似数值(浮点型) 字符型:ch ...
- Vue学习-基础语法
Vue v-if指令 Vue.js的指令是以v-开头的,它们作用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的HTM ...
- 被学长教会的高斯消元法Gauss
昨天学长教了我高斯消元法. 这里用一个栗子来模拟一下Gauss的流程. 真的通俗易懂!这里是洛谷题目链接. 这就是例子 x-2y+3z= 4x-5y+6z= 7x-8y+10z= 先将它转化为矩阵 - ...
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之状态数据模型(三)
对于游戏玩家而言,游戏界面上看到的"元素"千变万化:但是对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有所差异而已.因此建立游戏的状态数据模型是实现游 ...
- scala如何解决类型强转问题
scala如何解决类型强转问题 scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲的隐式推到,这某些场合也有些有心无力. 例如: java同属强类型语言,但java ...
- setTimeout解决循环值的几种方法
for(var i=0;i<5;i++){ setTimeout(function(){ console.log(`错误 ${i}`); },0) } for(var i=0;i<5;i+ ...