我有一个可以在其维度上变化的数组,有时可以很小,有时可以更深入。我正在尝试搜索数组中的特定元素,如果找到它,我想获得一个特定的父元素。例如,如果我有一个数组:
同样,维度可以改变,但是,我正在寻找拥有兄弟姐妹的最外层父母的键。 (在这种情况下)
Array (
[0] => Array (
[0] => Array (
[0] => Array ( <<----------------------------------------+
[0] => FOO0 |
[1] => BAR0 //Search BAR0 returns parent key 0 +
[2] => Array( |
[0] => HELLO0 |
[1] => BYE0 //Search BYE0 returns parent key 0 +
) |
[3] => FOO0 |
[4] => Array ( |
[0] => HELLO0 //Search HELLO0 returns parent key 0 --
)
)
[1] => Array ( <<----------------------------------------+
[0] => FOO1 |
[1] => BAR1 |
[2] => Array ( |
[0] => HELLO1 |
[1] => BYE1 |
) |
[3] => BASE1 |
[4] => Array ( |
[0] => BAZ1 |
[1] => Array ( |
[0] => DOO1 //Search DOO1 returns parent key 1 +
[1] => BOB2 //Search BOB2 returns parent key 1 +
)
)
)
[2] => FOO2 // Search FOO2 returns key 2 (itself)
)
)
)
FOO2的样本输出
[2] => FOO2 // searched value
我真的很感激一些帮助!谢谢!
答案 0 :(得分:1)
我不完全确定这是你在找什么,但你可以尝试一下:
function find($needle, array $haystack)
{
foreach ($haystack as $i => $x) {
if (is_array($x)) {
$b = find($needle, $x);
if ($b) return count($haystack) > 1 ? array($i, $x) : $b;
}
else if ($x == $needle) {
return array($i, $x);
}
}
return false;
}
list($key, $val) = find('FOO1', $data);
这不会返回确切的元素,而是它的副本。如果您想要原始项目,则需要更新它以使用参考。
如果您在查询函数时不想使用array($i, $x)
构造,则可以在这两个位置将array($i => $x)
更改为list
。但我认为在编写时更容易使用。
答案 1 :(得分:0)
function recursive_array_search($k,$h) {
foreach($h as $key=>$v) if($k===$v OR (is_array($v) && recursive_array_search($k,$v) !== false)) return $key;
return false;
}
用法:
echo recursive_array_search($searchThis, $InThisArray);
现在你只需修改它就可以返回任何你想要的东西。
来源:php.net