Maison >développement back-end >tutoriel php >Comment rechercher efficacement des valeurs clés dans des tableaux multidimensionnels en PHP ?

Comment rechercher efficacement des valeurs clés dans des tableaux multidimensionnels en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 00:07:29806parcourir

How to Efficiently Search for Key Values in Multidimensional Arrays in PHP?

Recherche dans des tableaux multidimensionnels de valeurs de clé correspondantes

Lorsque vous parcourez des tableaux multidimensionnels à la recherche d'une clé spécifique et de sa valeur correspondante, il est courant de rencontrer problèmes de récursion. Considérez l'exemple de méthode suivant :

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

Cette méthode vise à localiser une clé dans un tableau associatif et à renvoyer sa valeur associée. Cependant, son approche récursive présente un problème potentiel.

Pour résoudre ce problème, une solution plus moderne et plus efficace peut être utilisée en utilisant les nouvelles fonctionnalités de PHP :

<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 méthode utilise la récursivité et les itérateurs. pour parcourir le tableau efficacement et localiser la première clé correspondante.

Alternativement, si vous souhaitez parcourir toutes les correspondances au lieu de seulement la première, vous pouvez utiliser les générateurs de PHP 5.6 :

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

Avec cette approche, vous pouvez parcourir avec élégance toutes les valeurs correspondantes du tableau.

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