Maison  >  Article  >  développement back-end  >  Comment trouver efficacement la première clé correspondante dans un tableau PHP multidimensionnel ?

Comment trouver efficacement la première clé correspondante dans un tableau PHP multidimensionnel ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 05:49:01914parcourir

How to Efficiently Find the First Matching Key in a Multidimensional PHP Array?

Plongez dans la traversée de tableaux multidimensionnels : découvrez la première clé correspondante

Dans le domaine de la programmation PHP, parcourir des tableaux multidimensionnels peut être une tâche labyrinthique . Face à l'objectif de récupérer la valeur associée à la première clé correspondante, les développeurs peuvent tomber sur des approches récursives. L'une de ces méthodes, décrite ci-dessous, présente un écueil potentiel dans sa mise en œuvre récursive :

<br>private function find($needle, $haystack) {</p>
<pre class="brush:php;toolbar:false">foreach ($haystack as $name => $file) {
    if ($needle == $name) {
        return $file;
    } else if(is_array($file)) { //is folder
        return $this->find($needle, $file); //file is the new haystack
    }               
}

return &quot;did not find&quot;;

}

Cette fonction vise à explorer de manière récursive un tableau associatif, en recherchant la clé qui s'aligne avec l'aiguille saisie et en renvoyant sa valeur correspondante. Cependant, la récursivité reste incomplète, laissant la question sans réponse.

Adopter le PHP moderne pour une solution rationalisée

Dans le paysage en constante évolution de PHP, les versions plus récentes offrent plus approches efficaces et élégantes de la traversée des tableaux. Considérez l'extrait suivant adapté à PHP 5.6 et supérieur :

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        return $value;
    }
}

}

Ce code modernisé utilise la puissance des générateurs pour simplifier le processus de parcours récursif. Il parcourt de manière transparente tous les éléments du tableau, filtrant l'aiguille avant de renvoyer rapidement la valeur correspondante.

Extension des fonctionnalités avec des générateurs

L'avènement de PHP 5.6 a introduit des générateurs, permettant aux développeurs de générer plusieurs correspondances à partir de recherches récursives, pas seulement la première rencontrée. L'extrait suivant présente cette fonctionnalité améliorée :

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        yield $value;
    }
}

}

// Utilisation
foreach (recursiveFind($haystack, $needle) as $value) {

// Use `$value` here

}

Maintenant, vous pouvez parcourir toutes les paires clé-valeur correspondantes au lieu de vous limiter à la première correspondance. Cela étend la polyvalence de la fonction, permettant une récupération de données plus complète à partir de tableaux multidimensionnels.

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