Trouver la valeur de la clé correspondante dans un tableau multidimensionnel
La recherche de clés spécifiques dans des tableaux multidimensionnels complexes peut être une tâche difficile. Une fonction récursive personnalisée comme celle fournie tente de relever ce défi. Pourtant, elle peut rencontrer des problèmes avec son implémentation de récursion.
La fonction d'origine parcourt le tableau, renvoyant la valeur associée à la clé recherchée si elle est trouvée. Cependant, si la valeur est un tableau (représentant un dossier), elle s'appelle de manière récursive sur le sous-tableau (la nouvelle botte de foin). Cette récursion peut devenir problématique.
Une solution potentielle consiste à exploiter le RecursiveArrayIterator de PHP. Avec les versions 5.6 et ultérieures, l'utilisation de cet itérateur offre une approche plus efficace et plus fiable :
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; } } }
Cette fonction itère de manière récursive, examinant les clés et les valeurs dans tout le tableau. Lorsqu'il rencontre une clé correspondante, il renvoie la valeur correspondante.
Alternativement, pour PHP 5.6 et supérieur, les générateurs peuvent faciliter la recherche de plusieurs clés correspondantes :
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; } } }
En utilisant des générateurs, vous pouvez parcourir toutes les valeurs correspondantes, pas seulement la première. Cette fonctionnalité peut s'avérer utile lors de la gestion de tableaux complexes et profondément imbriqués.
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!