2012-05-13 12 views
34

Muszę połączyć dwie tablice w jedną tablicę, ale potrzebuję usunąć przed głównymi danymi, które mają ze sobą wspólnego (zdublowane wartości oznaczają), potrzebuję tylko niepowtarzalnych wartości, gdy scalony.Macierze scalające PHP o tylko NIE POWIĄZANYCH wartościach

Jak mogę to zrobić?

Jest to przykład tablica:

Pierwsza tablica

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" 
    } 
} 

Druga tablica

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" 
    } 
} 
+0

możliwe duplikat [Getting unikatowe wartości z tablic 2] (http: // stackoverflow.com/questions/3507419/getting-unique-values-from-2-arrays) - skorzystaj z wyszukiwania, zanim zadasz nowe pytanie. –

Odpowiedz

86

Można łączyć funkcję array_merge() z funkcją array_unique() (oba tytuły są dość oczywiste)

$array = array_unique (array_merge ($array1, $array2)); 
+0

a także widzę, że array_merge() wydaje się nie obliczać duplikatów, więc array_unique() jest przestarzałe w moim przypadku, czy nie! – sbaaaang

+1

'array_merge()' nie dodaje duplikatów kluczy, ale gdy masz zduplikowane wartości z różnymi kluczami, to dodaje te – Jeroen

+0

wonderfull właśnie potrzebuję array_merge(), ponieważ zawsze mam ten sam klucz zarówno we wszystkich tablicach, naprawdę thx! – sbaaaang

11

Jeśli rozumiem pytanie poprawnie:

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

zwrot

Array 
(
[0] => 1 
[1] => 2 
[2] => 3 
[5] => 5 
[6] => 6 
[7] => 7 
) 
+0

Przepraszam, zapomniałem o mam tablicę wielopoziomową nie prostą tablicę – sbaaaang

0

Szybsze rozwiązanie:

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


$array = concatArrays([$array1, $array2]); 
Powiązane problemy