Может быть, это излишне, но забавно использовать RecursiveIterators:)
ОБНОВЛЕНИЕ: Возможно, это было излишним со старыми версиями PHP, но с> = 5.6 (особенно с 7.0) Iбудет полностью использовать это без сомнения.
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;
}
}
}
ОБНОВЛЕНИЕ: Кроме того, начиная с PHP 5.6, с генераторами вы можете легко перебирать все элементы, которые проходят фильтр, а не только первый:
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
}