„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie filtere ich Zeilen aus einem 2D-Array basierend auf Schnittpunkten mit einem anderen 2D-Array in PHP?

Wie filtere ich Zeilen aus einem 2D-Array basierend auf Schnittpunkten mit einem anderen 2D-Array in PHP?

Veröffentlicht am 08.11.2024
Durchsuche:363

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

Filtern von Zeilen eines 2D-Arrays basierend auf Zeilenschnittpunkten

In PHP ist die Funktion array_diff_assoc() dafür konzipiert, den Unterschied zwischen zwei Arrays zu finden 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.

Verstehen des Problems

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 betrachtet werden, es sei denn, ihre Zeichenfolgendarstellungen sind identisch.

Beispieldaten

Betrachten Sie die folgenden Beispieldaten:

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];

Falsche Ausgabe

Wenn wir versuchen, array_diff_assoc() zu verwenden, um $array1 basierend auf den Zeilen in $array2 zu filtern, erhalten wir eine falsche Ausgabe:

$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]

Diese Ausgabe zeigt, dass die gemeinsame Zeile im Ergebnis vorhanden ist, während die beabsichtigte Ausgabe die exklusive Zeile von $array1 enthalten sollte.

Ursache des Problems

Wie bereits erwähnt, liegt das Problem im strengen Vergleich, der von array_diff_assoc() durchgeführt wird. Beim Vergleich der folgenden zwei Arrays:

Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )

Die Funktion gibt als Ergebnis das unterschiedliche Schlüssel-Wert-Paar zurück, da die Schlüssel-Wert-Paare nicht stringidentisch sind.

Richtiger Ansatz

Um dieses Problem zu beheben, können wir einen etwas anderen Ansatz verwenden, der das Vorhandensein bestimmter Schlüsselwerte in den Arrays prüft:

$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]

Dieser Ansatz verwendet in_array(), um zu prüfen, ob jede Zeile von $array1 in $array2 vorhanden ist. Wenn eine Zeile in $array2 nicht vorhanden ist, wird sie in die gefilterten Ergebnisse einbezogen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3