Heim  >  Artikel  >  Backend-Entwicklung  >  Wie filtere ich Array-Zeilen durch übereinstimmende Werte aus einem flachen Array?

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-23 16:41:02305Durchsuche

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>

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!

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