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

Barbara Streisand
Libérer: 2024-10-23 16:41:02
original
304 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!