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 "did not find";
}
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; } }
}
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; } }
}
// 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!