Zeilenteilmenge basierend auf der Einbeziehung von Spaltenwerten
Betrachten Sie ein Array, $arr1, mit mehreren Spalten und ein zweites flaches Array, $arr2, enthält bestimmte ID-Werte. Das Ziel besteht darin, $arr1 zu filtern, um nur die Zeilen beizubehalten, in denen ein Spaltenwert mit einem der Werte in $arr2 übereinstimmt.
Frühere Versuche mit Filterfunktionen oder array_search waren erfolglos. Eine praktische Lösung besteht darin, die native PHP-Funktion array_uintersect() zu verwenden.
Diese Funktion verwendet eine anonyme Rückruffunktion, die die ID-Spalte in beiden Eingabearrays auswertet (oder auf den Parameterwert zurückgreift, falls dieser nicht vorhanden ist). Beim Vergleich wird geprüft, ob die Werte gleich sind.
Im Callback wird der Operator => wird verwendet, um die Eingabe-Array-Variablen $a und $b zu erfassen, und der ternäre Operator ?: weist einen Rückgabewert ungleich Null zu.
Unter der Haube führt array_uintersect eine Sortierung während des Auswertungsprozesses durch und optimiert so die Leistung und Ausführung deutlich schneller als iterative in_array()-Aufrufe.
Der folgende Code demonstriert die Lösung:
<code class="php">var_export( array_uintersect( $arr1, $arr2, fn($a, $b) => ($a['id'] ?? $a) <= ($b['id'] ?? $b) ) );</code>
Das obige ist der detaillierte Inhalt vonWie filtere ich Array-Zeilen basierend auf Spaltenwerten, die mit bestimmten Werten übereinstimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!