Maison  >  Article  >  développement back-end  >  Comment puis-je trouver la valeur de la première clé correspondante dans un tableau multidimensionnel lorsque la récursion est impliquée ?

Comment puis-je trouver la valeur de la première clé correspondante dans un tableau multidimensionnel lorsque la récursion est impliquée ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 11:43:27261parcourir

How can I find the value of the first matching key in a multidimensional array when recursion is involved?

Récupération de la valeur de la première clé correspondante dans un tableau multidimensionnel : résoudre les problèmes de récursion

Dans le développement de logiciels, naviguer dans des tableaux multidimensionnels et rechercher des clés spécifiques sont une tâche courante. Cependant, lorsque la récursion est impliquée, les choses peuvent devenir délicates. Analysons l'extrait de code suivant qui vise à trouver la valeur associée à une clé correspondante :

<code class="php">private function find($needle, $haystack) {
    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 "did not find";
}</code>

Le problème réside dans la récursivité elle-même. Lorsqu'elle rencontre un tableau dans la botte de foin, la variable fichier devient la nouvelle botte de foin. Cependant, la référence à la botte de foin d'origine est perdue, conduisant potentiellement à un cycle de récursion éternel.

Pour résoudre ce problème, envisagez les solutions suivantes :

RecursiveIteratorIterator

PHP 5.6 et versions ultérieures introduisent RecursiveIteratorIterator, ce qui simplifie considérablement la tâche :

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

Cette approche tire parti d'un RecursiveArrayIterator qui traverse le tableau et d'un RecursiveIteratorIterator qui parcourt efficacement tous les éléments, y compris les tableaux imbriqués.

Fonction basée sur un générateur

Pour PHP 5.6 et versions ultérieures, vous pouvez utiliser des générateurs pour récupérer toutes les valeurs correspondantes :

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

Cette fonction renvoie faire correspondre les valeurs à l'aide du mot-clé rendement, vous permettant de les parcourir toutes avec une boucle foreach.

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