Heim >Backend-Entwicklung >PHP-Tutorial >Wie filtere ich Zeilen aus einem 2D-Array basierend auf Schnittpunkten mit einem anderen 2D-Array in PHP?
In PHP dient die Funktion array_diff_assoc() dazu, den Unterschied zwischen zwei Arrays zu ermitteln und gleichzeitig den Schlüsselwert zu priorisieren Paare. Wenn diese Funktion jedoch zum Filtern von Zeilen aus einem 2D-Array basierend auf der Schnittmenge mit einem anderen 2D-Array verwendet wird, liefert sie möglicherweise nicht immer die erwarteten Ergebnisse.
Das Problem entsteht aufgrund von der strikte Vergleich, der von array_diff_assoc() durchgeführt wird. Es vergleicht während des Vergleichs Zeichenfolgendarstellungen von Schlüssel-Wert-Paaren. Das bedeutet, dass selbst wenn zwei Schlüssel-Wert-Paare dieselben Werte enthalten, sie nicht als gleich angesehen werden, es sei denn, ihre Zeichenfolgendarstellungen sind identisch.
Berücksichtigen Sie die folgenden Beispieldaten:
<code class="php">$array1 = [ [12 => 'new q sets'], [11 => 'common set'] ]; $array2 = [ [11 => 'common set'] ];</code>
Wenn wir versuchen, array_diff_assoc() zu verwenden, um $array1 basierend auf den Zeilen in $array2 zu filtern, erhalten wir eine falsche Ausgabe:
<code class="php">$output = array_diff_assoc($array1, $array2); print_r($output); // Output: [ // [11 => 'common set'] // ]</code>
Dies Die Ausgabe zeigt, dass die gemeinsame Zeile im Ergebnis vorhanden ist, während die beabsichtigte Ausgabe die exklusive Zeile von $array1 enthalten sollte.
Wie bereits erwähnt, liegt das Problem in der strenger Vergleich, durchgeführt von array_diff_assoc(). Beim Vergleich der folgenden zwei Arrays:
<code class="php">Array ( [0] => "Array" [1] => "Array" ) Array ( [0] => "Array" )</code>
Die Funktion gibt als Ergebnis das unterschiedliche Schlüssel-Wert-Paar zurück, da die Schlüssel-Wert-Paare nicht stringidentisch sind.
Um dieses Problem zu beheben, können wir einen etwas anderen Ansatz verwenden, der das Vorhandensein bestimmter Schlüsselwerte in den Arrays prüft:
<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) { return !in_array($row, $array2); }); print_r($filteredRows); // Output: [ // [12 => 'new q sets'] // ]</code>
Dieser Ansatz verwendet in_array(), um zu überprüfen, ob jede Zeile vorhanden ist von $array1 ist in $array2 vorhanden. Wenn eine Zeile in $array2 nicht vorhanden ist, wird sie in die gefilterten Ergebnisse einbezogen.
Das obige ist der detaillierte Inhalt vonWie filtere ich Zeilen aus einem 2D-Array basierend auf Schnittpunkten mit einem anderen 2D-Array in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!