返回数组索引路径的PHP函数
我一直在尝试编写一个PHP函数,它在数组中搜索返回数组索引路径的PHP函数,php,arrays,search,path,indexing,Php,Arrays,Search,Path,Indexing,我一直在尝试编写一个PHP函数,它在数组中搜索id索引valeus,一旦找到,就返回导致它被发现的路径 以以下数组为例: Array ( [0] => Array ( [id] => 1 [data] => Array ( [0] => Array (
id
索引valeus,一旦找到,就返回导致它被发现的路径
以以下数组为例:
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
它将返回数组(1,10)
。然而,在无数次尝试中,我都失败了。设置路径应设置为索引id
。然而,我无法理解。非常感谢您的指导。此函数返回数组(0,'data',2,'data',1,'id'),例如OP(即值的完整路径)
函数,用于在数组中搜索$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;
}
此函数返回数组(1,10)作为OP示例 (将留下另一个答案,以防有人寻找正常的“路径搜索”)
它返回
array(1,10)
,因为父数组的id
设置为先1后10。我将测试你的功能,谢谢。好的,我现在明白你的意思了,看看我的其他答案。它工作了!我几秒钟前就解决了这个问题,但您的示例使用更少的代码更快地完成了这个任务。谢谢3.
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;
}