Tal vez sea una exageración, pero es divertido de usar RecursiveIterators :)
ACTUALIZACIÓN: Tal vez fue excesivo con versiones antiguas de PHP, pero con> = 5.6 (especialmente con 7.0) lo usaría totalmente sin dudarlo.
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;
}
}
}
ACTUALIZACIÓN: También, a partir de PHP 5.6, con los generadores se puede recorrer fácilmente a través de todos los elementos que pasan el filtro, no sólo la primera de ellas:
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
}
¿Cómo es que no sabe ¿En qué nivel está? –