21 Stimmen

Wie vergleicht man zwei Arrays und entfernt übereinstimmende Elemente aus einem für die nächste Schleife?

Wie sonst könnten Sie zwei Arrays ($A und $B )vergleichen und übereinstimmende Elemente aus dem ersten zu reduzieren, um für die nächste Schleife über das Array $A vorzubereiten?

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

Ist dies der einfachste Weg oder gibt es eine Möglichkeit, eine andere Funktion zu verwenden, an die ich noch nicht gedacht habe? Mein Ziel ist es, ein Array zu haben, das ich in einer Schleife durchlaufen kann, um Gruppen von verwandten Inhalten herauszuziehen (ich habe diese Beziehungen an anderer Stelle definiert), bis das Array false zurückgibt.

0 Stimmen

Vielleicht liegt es an mir, aber ich glaube, die Frage ist nicht ganz klar. So wie ich es lese, sind Sie nur an array_diff($A,$B) interessiert (was ziemlich einfach erscheint). Oder ist die Berechnung von $C auch wichtig? (Wenn ja, können Sie array_diff($A,$C) anstelle von array_diff($A,$B) verwenden).

0 Stimmen

Nein, ich erkläre $C als die Schnittmenge von $A und $B

27voto

rg88 Punkte 20173

Sie haben es geschafft. Benutze einfach array_diff o array_intersect . Viel einfacher geht es nicht.

Bearbeiten: Zum Beispiel:

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

Fuente

2 Stimmen

Berücksichtigen Sie auch array_diff_assoc wenn die Reihenfolge der Werte in den beiden Arrays wichtig ist.

7voto

Kalpesh Bhaliya Punkte 51

Lieber einfacher und sauberer Weg

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

0 Stimmen

Diese Antwort ist besser, da sie die Array-Elemente bei übereinstimmenden Indizes neu anordnet. Im Gegensatz zur Antwort von Stuart, die Elemente aus den übereinstimmenden Indizes entfernt. Also, wenn es ein passendes Element bei Index 1 war, versuchen Sie, Index 1 in Ergebnis-Array zugreifen, wird es Fehler werfen.

0 Stimmen

Ich weiß nicht, wer Stuart ist, aber in den Anforderungen des Fragenden wird kein Interesse an der Einhaltung der Indizes der Arrays erwähnt. Diese Antwort macht das Gleiche wie die Antwort von rg88 und ruft dann array_merge() aus einem unbekannten Grund.

2voto

warren Punkte 30258

Siehe auch array_unique . Wenn Sie die beiden Arrays verketten, werden alle Duplikate entfernt.

0 Stimmen

Ich sehe nicht, wie dies die Frage beantwortet oder das gewünschte Ergebnis liefert.

0voto

rg88 Punkte 20173

Hey, eine noch bessere Lösung: array _ uintersect. Damit können Sie die Arrays wie bei array_intersect vergleichen, aber dann können Sie die Daten mit einer Callback-Funktion vergleichen.

0 Stimmen

Welchen Nutzen hat die array_uintersect() bringen? Ich sehe nicht, dass es für diese Aufgabe einen Nutzen bringt.

-1voto

Ashfaq Hussain Punkte 75

Versuchen Sie dies

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X