Maison  >  Article  >  développement back-end  >  Comment filtrer les lignes d'un tableau en faisant correspondre les valeurs d'un tableau plat ?

Comment filtrer les lignes d'un tableau en faisant correspondre les valeurs d'un tableau plat ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-23 16:41:02305parcourir

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

Recherche des lignes de tableau correspondant aux valeurs dans un tableau plat

Dans ce scénario, vous disposez d'un tableau, $arr1, avec plusieurs colonnes, et un deuxième tableau, $arr2, contenant un ensemble de valeurs d'ID. L'objectif est de filtrer $arr1 et de renvoyer uniquement les lignes contenant les valeurs d'ID présentes dans $arr2.

Une solution efficace à ce problème réside dans l'utilisation de la fonction array_uintersect(), qui effectue une intersection triée de deux tableaux. en utilisant une fonction de rappel personnalisée. Cette fonction fonctionne sur des paires d'éléments des deux tableaux d'entrée et renvoie -1, 0 ou 1, en fonction du résultat de la comparaison.

Rappel personnalisé :

La fonction personnalisée La fonction de rappel que nous définissons dans array_uintersect() compare la colonne ID de $arr1 (si présente) ou l'élément entier lui-même si la colonne n'est pas définie, avec la valeur de $arr2.

<code class="php">fn($a, $b) => ($a['id'] ?? $a) <=> ($b['id'] ?? $b)</code>

Utilisation du ternaire opérateur, nous attribuons $a['id'] à $a si la colonne existe, et $a lui-même sinon. De même, nous faisons la même chose pour $b. Cela nous permet de gérer les cas où la colonne ID peut ne pas être présente dans toutes les lignes.

Tri et efficacité :

Array_uintersect() utilise le tri pour comparer efficacement les éléments. Par défaut, il trie les deux tableaux d'entrée numériquement. Puisque nous comparons des valeurs d'ID, qui sont probablement numériques dans votre cas, ce tri améliore le temps d'exécution.

Exemple d'utilisation :

Pour démontrer le fonctionnement de cette solution, nous pouvons l'appliquer aux tableaux fournis :

<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>

Le $resultingArray contiendra les lignes de $arr1 où les valeurs d'ID correspondent à celles de $arr2.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn