Heim  >  Artikel  >  Backend-Entwicklung  >  Wie filtere ich 2D-Array-Zeilen nach anderen Array-Zeilen und schließe dabei gemeinsame Zeilen aus?

Wie filtere ich 2D-Array-Zeilen nach anderen Array-Zeilen und schließe dabei gemeinsame Zeilen aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-25 11:15:02324Durchsuche

How to Filter 2D Array Rows by Another Array Rows While Excluding Common Rows?

Zweidimensionale Array-Zeilen nach anderen Array-Rows filtern

Bei der Arbeit mit zweidimensionalen Arrays ist es wichtig, Zeilen nach bestimmten Kriterien zu filtern. Dieser Artikel befasst sich mit einer häufigen Herausforderung: dem Filtern der Zeilen eines Arrays nach den Zeilen in einem anderen Array, während gemeinsame Zeilen ausgeschlossen werden.

Problem:

Ein Versuch, array_diff_assoc( ), um diese Filterung zu erreichen, werden gemeinsame Zeilen anstelle der beabsichtigten eindeutigen Zeilen zurückgegeben.

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

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

Nach dem Aufruf von array_diff_assoc($array1, $array2) enthält die Ausgabe immer noch die gemeinsame Zeile:

<code class="php">[
    [11 => 'common set']
]</code>

Lösung:

Die Hauptursache des Problems liegt im Vergleichsmechanismus, der von array_diff_assoc() verwendet wird. Es wird ein strikter Vergleich verwendet, was bedeutet, dass die Zeichenfolgendarstellungen der Werte genau übereinstimmen müssen. Im gegebenen Beispiel ist der mit Schlüssel 11 in beiden Arrays verknüpfte Wert „Common Set“. array_diff_assoc() behandelt sie jedoch als unterschiedliche Werte, da sie in verschiedenen Arrays gespeichert sind.

Um das gewünschte Filterverhalten zu erhalten, müssen wir einen Vergleich verwenden, der die tatsächlich in den Arrays gespeicherten Werte berücksichtigt. Eine Möglichkeit, dies zu erreichen, besteht darin, alle Array-Elemente vor dem Vergleich in einen gemeinsamen Typ zu konvertieren. Hier ist ein Beispiel mit json_encode():

<code class="php">$json_array1 = array_map('json_encode', $array1);
$json_array2 = array_map('json_encode', $array2);

$filtered_rows = array_diff_assoc($json_array1, $json_array2);

$filtered_rows = array_map('json_decode', $filtered_rows);</code>

Dieser Ansatz konvertiert jedes Array-Element in einen JSON-String und stellt sicher, dass der Vergleich nun auf den tatsächlichen Werten basiert. Der Filtervorgang identifiziert nur die eindeutige Zeile korrekt und gibt sie zurück:

<code class="php">[
    [12 => 'new q sets']
]</code>

Das obige ist der detaillierte Inhalt vonWie filtere ich 2D-Array-Zeilen nach anderen Array-Zeilen und schließe dabei gemeinsame Zeilen aus?. 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