web-dev-qa-db-ja.com

PHP NOT DUPLICATED値のみで配列をマージ

2つの配列を1つの配列にマージする必要がありますが、必要なのは、両方のメインデータが重複する前に削除することです(重複値は意味します)、マージするときは一意の値のみが必要です。

どうやってやるの?

これは配列の例です:

最初の配列

array(3) { 
    [0]=> object(stdClass)#17 (1) { 
        ["email"]=> string(7) "gffggfg" 
    } 
    [1]=> object(stdClass)#18 (1) { 
        ["email"]=> string(6) "[email protected]" 
    } 
    [2]=> object(stdClass)#19 (1) { 
        ["email"]=> string(6) "wefewf" 
    } 
} 

2番目の配列

array(3) { 
    [0]=> object(stdClass)#17 (1) { 
        ["email"]=> string(7) "[email protected]" 
    } 
    [1]=> object(stdClass)#18 (1) { 
        ["email"]=> string(6) "wefwef" 
    } 
    [2]=> object(stdClass)#19 (1) { 
        ["email"]=> string(6) "wefewf" 
    } 
} 
54
itsme

array_merge() 関数と array_unique() 関数を組み合わせることができます(両方のタイトルは一目瞭然です)

$array = array_unique (array_merge ($array1, $array2));
142
Jeroen

質問を正しく理解した場合:

 $a1 = Array(1,2,3,4);
 $a2 = Array(4,5,6,7);
 $array =  array_diff(array_merge($a1,$a2),array_intersect($a1,$a2));
 print_r($array);

帰る

Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 5
[6] => 6
[7] => 7
)
11
Luca Rainone

少し遅れた答えですが、配列結合演算子+は非常に大きな仕事をします(3番目のセクションで here を見つけました)。

$array1 + $array2 = $array //if duplicate found, the value in $array1 will be considered ($array2 value for array_merge, if keys clearly specified)
1
Marek N

より高速なソリューション:

function concatArrays($arrays){
    $buf = [];
    foreach($arrays as $arr){
        foreach($arr as $v){
            $buf[$v] = true;
        }
    }
    return array_keys($buf);
}


$array = concatArrays([$array1, $array2]);
1
kz_sergey