我一直在尝试编写一个PHP函数来搜索数组中的id
索引值,并且一旦找到,就会返回导致它被发现的路径。
采取以下数组:
Array
(
[0] => Array
(
[id] => 1
[data] => Array
(
[0] => Array
(
[id] => 8
)
[1] => Array
(
[id] => 9
)
[2] => Array
(
[id] => 10
[data] => Array
(
[0] => Array
(
[id] => 15
[data] => Array
(
[0] => Array
(
[id] => 22
)
)
)
[1] => Array
(
[id] => 21
)
)
)
)
)
)
如果查找[id] => 21
,则会返回array(1,10)
。然而,在许多尝试中我失败了。设置路径应设置为索引id
。但是,我无法弄明白。任何指导的话都非常感谢。
答案 0 :(得分:2)
此函数返回OP示例的数组(1,10)
(将留下其他答案以防万一有人会寻找正常的“路径搜索”)
function search_data($needle, $haystack) {
if (is_array($haystack)) {
foreach($haystack as $data) {
if ($data['id'] == $needle) return array();
if (isset($data['data'])) {
if (($path = search_data($needle, $data['data'])) !== false) return array_merge(array($data['id']), $path);
}
}
}
return false;
}
答案 1 :(得分:1)
此函数返回OP示例的数组(0,'data',2,'data',1,'id')(即值的完整路径)
在数组中搜索$key => $value
对并返回路径的函数:
function array_search_r($key, $value, $haystack, $strict = null) {
$strict = $strict ?: false;
if (is_array($haystack)) {
foreach($haystack as $k => $v) {
if ($strict ? ($k === $key && $v === $value) : ($k == $key && $v == $value)) return array($k);
if(($path = array_search_r($key, $value, $v, $strict)) !== false) return array_merge(array($k), $path);
}
}
return false;
}