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() :可以用来一次对多个数组进行排序,或者根据 ...
随机推荐
- #define的使用方法体会
#define 创建一个宏,该宏是标识符或參数化标识符与标记字符串的关联. 在定义宏之后.编译器可用标记字符串替换源文件里标识符的每一个匹配项. 双击以所有折叠.">语法 #defin ...
- <button>标签也能提交表单问题
如何避免<button>标签也能提交表单的问题: 只需加上一个属性:type='button'即可:如<button type="button"> < ...
- spring mvc 伪静态处理
spring mvc 伪静态处理 @RequestMapping(value = JsonUrlCommand.webshare_get_opuss+"/u{u:[\\w\\W]+}p{p: ...
- Jmeter 02 JMeter体系结构
1. Jmeter简介 2. Jmeter体系结构 3. Jmeter运行原理 4. Jmeter测试计划要素 5. Jmeter环境介绍 6. Jmeter与Loadrunner异同
- poj2816
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29799 Accepted: 12090 De ...
- jvm本身的多线程机制
1 多线程环境下的构造函数调用 构造函数本身并没有隐式的同步,因为各个线程构建的是自己的对象,它们之间是不存在竞争关系的. 2 class loader在load class时被了sychronize ...
- A vectorized example
http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture4.pdf
- [luogu4315]月下“毛景树”
[luogu4315]月下"毛景树" luogu 联赛前复习一发树剖.不会告诉你WA了4发 #define ls x<<1,l,mid #define rs x< ...
- Js数组的map,filter,reduce,every,some方法
var arr=[1,2,3,4,5,6]; res = arr.map(function(x){return x*x}) [1, 4, 9, 16, 25, 36] res = arr.filter ...
- iOS应用公布Invalid Binary问题解决方式
上次公布一淘HD应用.头一天公布,第二天就上线,私下还在想.是不是苹果採用什么优化的解决方式了,导致审核速度加快了. 这两天公布新版.一直碰到Invaild Binary问题.才想明确,原来大家都被这 ...