簡體   English   中英

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_recursive()函數。 我無法使用它,因為它需要專門比較屬性'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;
}

array_column()可以使用documentID重新索引,以便array_replace()替換$array1中在$array2中具有相同鍵的元素:

$result = array_replace(array_column($array1, null, 'documentId'),
                        array_column($array2, null, 'documentId'));

然后,如果需要重新編制索引:

$result = array_values($result)

按兩個數組循環,如果需要,可以合並或替換值

<?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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM