Maison  >  Article  >  développement back-end  >  Comment rechercher récursivement une clé dans un tableau multidimensionnel en PHP ?

Comment rechercher récursivement une clé dans un tableau multidimensionnel en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 15:58:30807parcourir

How to Recursively Search for a Key in a Multidimensional Array in PHP?

Rechercher récursivement une clé dans un tableau multidimensionnel

Problème :

La méthode find() fournie tente de récursivement rechercher une clé spécifique dans un tableau associatif et renvoyer la valeur associée. Cependant, l'implémentation de la récursivité a un problème.

Solution :

Le problème avec le code d'origine est lié à la récursivité. Il tente de renvoyer directement la sortie de l'appel récursif sans gérer le cas où aucune correspondance n'est trouvée au niveau actuel. Cela peut conduire à la valeur de retour incorrecte de « n'a pas trouvé », qu'une correspondance existe ou non plus profondément dans le tableau.

Pour remédier à cela, le code suivant peut être utilisé pour gérer correctement la récursivité :

<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
            $result = $this->find($needle, $file); //file is the new haystack
            if ($result !== "did not find") {
                return $result;
            }
        }               
    }
    
    return "did not find";
}</code>

Cette fonction mise à jour vérifie si le résultat de l'appel récursif n'est pas "n'a pas trouvé", indiquant qu'une correspondance a été trouvée à un niveau plus profond. Dans ce cas, il renvoie la valeur trouvée. Sinon, il renvoie la valeur "n'a pas trouvé" comme avant.

Solutions alternatives :

Dans les versions PHP modernes (5.6 et supérieures), des solutions alternatives utilisant des itérateurs et /ou les générateurs peuvent être plus efficaces et élégants :

<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 fonction utilise des itérateurs pour parcourir efficacement le tableau multidimensionnel et trouver la première clé correspondante.

De plus, des générateurs peuvent être utilisés pour itérer sur tous les éléments correspondants, pas seulement le premier :

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

// Usage
foreach (recursiveFind($haystack, $needle) as $value) {
    // Use `$value` here
}</code>

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