Wie filtere ich Array-Zeilen durch übereinstimmende Werte aus einem flachen Array?

Barbara Streisand
Freigeben: 2024-10-23 16:41:02
Original
304 Leute haben es durchsucht

How to Filter Array Rows by Matching Values from a Flat Array?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!