Heim >Backend-Entwicklung >PHP-Tutorial >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?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 06:24:30693Durchsuche

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

Zeilen eines 2D-Arrays basierend auf Zeilenschnittpunkten filtern

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.

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

Beispieldaten

Berücksichtigen Sie die folgenden Beispieldaten:

<code class="php">$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];</code>

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:

<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.

Ursache des Problems

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.

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:

<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn