Maison > développement back-end > tutoriel php > 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
Libérer: 2024-10-31 05:49:01
original
954 Les gens l'ont consulté

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;;
Copier après la connexion

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
    }
}
Copier après la connexion

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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;
    }
}
Copier après la connexion

}

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

// Use `$value` here
Copier après la connexion

}

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!

source:php.cn
Article précédent:Pourquoi ne puis-je pas trouver \"vendor/autoload.php\" : un guide pour résoudre les erreurs de chargement automatique du compositeur Article suivant:Comment vérifier si une chaîne commence par une chaîne spécifique en 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
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal