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!