2008-10-22 6 views
12

Jak inaczej porównać dwie tablice ($ A i $ B) i zredukować elementy pasujące z pierwszego, aby przygotować się do następnej pętli w tablicy $ A?Jak porównać dwie tablice i usunąć pasujące elementy z jednej dla następnej pętli?

$A = array(1,2,3,4,5,6,7,8); 
$B = array(1,2,3,4); 

$C = array_intersect($A,$B); //equals (1,2,3,4) 
$A = array_diff($A,$B);  //equals (5,6,7,8) 

Czy jest to najprostszy sposób, czy istnieje sposób użycia innej funkcji, o której nie myślałem? Moim celem jest posiadanie tablicy, którą mogę przełączyć, wyciągając grupy powiązanych treści (zdefiniowałem te relacje w innym miejscu), dopóki tablica nie zwróci fałszu.

+0

To może być ja, ale nie sądzę, pytanie jest bardzo jasne. Kiedy go czytam, interesuje cię tylko array_diff ($ A, $ B) (co wydaje się całkiem proste). Czy też konieczne jest obliczenie $ C? (Jeśli tak, możesz użyć array_diff ($ A, $ C) zamiast array_diff ($ A, $ B).) – mweerden

+0

Nie, deklaruję $ C jako punkt przecięcia $ A i $ B – kevtrout

Odpowiedz

11

Masz to. Po prostu użyj array_diff lub array_intersect. Nie ma nic prostszego.

Edit: Na przykład:

$arr_1 = array_diff($arr_1, $arr_2); 
$arr_2 = array_diff($arr_2, $arr_1); 

Source

+2

Rozważ także [array_diff_assoc ] (http://www.php.net/manual/en/function.array-diff-assoc.php), jeśli kolejność wartości w dwóch tablicach jest ważna. – Duncanmoo

0

Hej, jeszcze lepsze rozwiązanie: array _ uintersect. Pozwala to porównać tablice według array_intersect, ale pozwala porównać dane z funkcją zwrotną.

0

Spróbuj tego

$a = array(0=>'a',1=>'x',2=>'c',3=>'y',4=>'w'); 
$b = array(1=>'a',6=>'b',2=>'y',3=>'z'); 
$c = array_intersect($a, $b); 

$result = array_diff($a, $c); 
print_r($result); 
2

Drogi łatwy i czysty sposób

$clean1 = array_diff($array1, $array2); 
$clean2 = array_diff($array2, $array1); 
$final_output = array_merge($clean1, $clean2); 
+0

Ta odpowiedź jest lepsza, ponieważ zmienia układ elementów tablicy na zgodnych indeksach. W przeciwieństwie do odpowiedzi stuart, która usunie elementy z pasujących indeksów. Więc jeśli w indeksie 1 był pasujący element, spróbujesz uzyskać dostęp do indeksu 1 w tablicy wyników, spowoduje to błąd. – Ajji