我想合并两个多维数组。考虑下面的场景。我有两个数组要合并。但是,我希望删除/避免合并任何重复的记录,因为它们共享"documentId"。
阵列#1
Array
(
[0] => Array
(
['documentId'] => 124
['name'] => "Title #1"
['version'] => "1"
)
[1] => Array
(
['documentId'] => 123
['name'] => "Title #2"
['version'] => "1"
)
)
阵列#2
Array
(
[0] => Array
(
['documentId'] => 123
['name'] => "Title #2 updated"
['version'] => "2"
)
)
新阵列/合并阵列
Array
Array
(
[0] => Array
(
['documentId'] => 123
['name'] => "Title #2 updated"
['version'] => "2"
)
[1] => Array
(
['documentId'] => 124
['name'] => "Title #2"
['version'] => "1"
)
)
我已经看过array_replace_recurive()函数。我无法使用它,因为它需要在属性"documentId"而不是数组的键上进行特定比较。
只需循环遍历数组,并将它们设置到另一个以文档id为键的数组中。具有的后续值将覆盖先前已设置的值。
示例:
$merged = array();
foreach($array1 as $value){
$merged[$value['documentId']] = $value;
}
foreach($array2 as $value){
$merged[$value['documentId']] = $value;
}
在合并$arr1和$arr2 时将documentId设置为密钥
$new_array = array();
foreach ( $arr1 as $v ) {
$new_array[ $v['documentID'] ] = $v;
}
foreach ( $arr2 as $v ) {
$new_array[ $v['documentID'] ] = $v;
}
通过两个数组循环,如果需要,可以合并或替换值
<?php
$students1 = array(
0 => array(
'student_id' => 1,
'name' => 'John',
'enrollment' => 'AAA111'
),
1 => array(
'student_id' => 2,
'name' => 'Mike',
'enrollment' => 'BBB222'
)
);
$students2 = array(
0 => array(
'student_id' => 1,
'name' => 'John',
'enrollment' => 'AAA111'
),
1 => array(
'student_id' => 3,
'name' => 'Anton',
'enrollment' => 'BBB333'
)
);
$students = [];
foreach ($students1 as $student) {
$students[$student['student_id']] = $student;
}
foreach ($students2 as $student) {
if (!isset($students[$student['student_id']])) {
$students[$student['student_id']] = $student;
}
}
var_dump(array_values($students));
array_column()
可以使用documentID
重新索引,以便array_replace()
将替换$array1
中在$array2
:中具有相同密钥的元素
$result = array_replace(array_column($array1, null, 'documentId'),
array_column($array2, null, 'documentId'));
然后,如果需要重新索引:
$result = array_values($result)