Array-Zeilen finden, die mit Werten in einem flachen Array übereinstimmen
In diesem Szenario haben Sie ein Array, $arr1, mit mehreren Spalten und ein zweites Array, $arr2, das eine Reihe von ID-Werten enthält. Das Ziel besteht darin, $arr1 zu filtern und nur die Zeilen zurückzugeben, die in $arr2 vorhandene ID-Werte enthalten.
Eine effiziente Lösung für dieses Problem liegt in der Verwendung der Funktion array_uintersect(), die eine sortierte Schnittmenge zweier Arrays durchführt Verwenden einer benutzerdefinierten Rückruffunktion. Diese Funktion arbeitet mit Elementpaaren aus beiden Eingabearrays und gibt je nach Vergleichsergebnis -1, 0 oder 1 zurück.
Benutzerdefinierter Rückruf:
Der benutzerdefinierte Die Rückruffunktion, die wir in array_uintersect() definieren, vergleicht die ID-Spalte von $arr1 (falls vorhanden) oder das gesamte Element selbst, wenn die Spalte nicht definiert ist, mit dem Wert von $arr2.
<code class="php">fn($a, $b) => ($a['id'] ?? $a) <=> ($b['id'] ?? $b)</code>
Verwendung des Ternärs Operator weisen wir $a['id'] $a zu, wenn die Spalte existiert, andernfalls $a selbst. Ebenso machen wir dasselbe für $b. Dadurch können wir Fälle behandeln, in denen die ID-Spalte möglicherweise nicht in allen Zeilen vorhanden ist.
Sortierung und Effizienz:
Array_uintersect() nutzt die Sortierung, um Elemente effizient zu vergleichen. Standardmäßig werden beide Eingabearrays numerisch sortiert. Da wir ID-Werte vergleichen, die in Ihrem Fall wahrscheinlich numerisch sind, verbessert diese Sortierung die Ausführungszeit.
Beispielverwendung:
Um zu demonstrieren, wie diese Lösung funktioniert, Wir können es auf die bereitgestellten Arrays anwenden:
<code class="php">$arr1 = [ ['key' => 0, 'id' => 14, 'name' => 'bob', 'style' => 'big', 'age' => 33, 'whim' => 'no'], // ... (other rows from $arr1) ]; $arr2 = [14, 72, 8790]; $resultingArray = array_uintersect($arr1, $arr2, $customCallback);</code>
Das $resultingArray enthält die Zeilen von $arr1, wobei die ID-Werte mit denen in $arr2 übereinstimmen.
Das obige ist der detaillierte Inhalt vonWie filtere ich Array-Zeilen durch übereinstimmende Werte aus einem flachen Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!