求多维数组的并集

求多维数组的并集

最近 有个小需求 一眼看上去挺简单
细想还是有点门道 可能是我太渣渣了😂

问题

将如下的$arr进行处理 替换$arr_template对应的键值对「原来的value为空」
两个数组之间无序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// 需求并集处理的数组
$arr = [
[
'name'=>'xasxa',
'value'=>'3131'
],
[
'name'=>'xxcc',
'value'=>'1234'
]
];
// 并集处理的模版
$arr_template = [
[
'name'=>'xxcc',
'value'=>'0'
],
[
'name'=>'qedcc',
'value'=>'0'
],
[
'name'=>'csaq',
'value'=>'0'
],
[
'name'=>'xasxa',
'value'=>'0'
],
[
'name'=>'hjsa',
'value'=>'0'
]
];

思路

先转换key为子数组中的name 然后进行数组合并

array_column()

介绍:
返回输入数组中某个单一列的值
array_column(_array_,_column_key_,_index_key_) index_key参数为可选
用作返回数组的索引/键的列

array_merge()

介绍:
把一个或多个数组合并为一个数组 特性:
如果两个或更多个数组元素有相同的键名 则最后的元素会覆盖其他元素
如果您仅向 array_merge() 函数输入一个数组 且键名是整数
则该函数将返回带有整数键名的新数组 其键名以 0 开始进行重新索引 补充:
处理两个或更多个数组元素有相同的键名的情况
array_merge_recursive() 不会进行键名覆盖
而是将多个相同键名的值递归组成一个数组

实现

1
2
3
4
5
6
<?php
$arr = array_column($arr, null, 'name');
$arr_template = array_column($arr_template , null, 'name');
// 注意合并的顺序
$arr = array_merge($arr_template, $arr);
return $arr;

最后

欢迎指点 鄙人才疏学浅
只能想到这个笨办法😊

# PHP

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×