PHP排除重复合并多维数组


PHP Exclude Dups Merging Multidimensional Arrays

我想合并两个多维数组。考虑下面的场景。我有两个数组要合并。但是,我希望删除/避免合并任何重复的记录,因为它们共享"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)