也许这是矫枉过正,但使用递归迭代器:)
更新:也许对于旧版本的PHP来说,这是过度的,但是对于> = 5.6(特别是7.0),我会毫无疑问地完全使用它。
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
}