使用适当的索引进行递归数组搜索
Recursive array searching with proper indexing
我正在尝试构建一个功能,使我能够在复杂的层次结构中找到自己的出路。
例如,给定这个数组:
$arr=array("name"=>"NameA","children"=>array());
$arr["children"][]=array("name"=>"NameB","size"=>"38");
$arr["children"][]=array("name"=>"NameC","children"=>array("name"=>'NameD',"children"=>array()));
我想找到给定名称的完整密钥路径。例如,搜索 NameC
将 return $a=array('children',1)
和 NameD
将 return $a=array('children',1,'children')
。这将允许我使用 $arr['children'][1]['children']['name']
或 $arr[$a[0]][$a[1]][$a[2]]['name']
检索 NameD
。
我已经尝试在每个级别调用此函数:
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
But recursive_array_search('NameC')
returns 'children'
instead of returning 1. 我试过以多种方式修改它,但无济于事。
请注意,我无法更改原始数组的结构,因为我正在使用它来构建需要具有此结构的 JSON 数组。
如有任何帮助,我们将不胜感激。
我在数组中收集路径
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
// found - create array and put lower key
if($needle===$value) return(array($key));
if (is_array($value) && ($ret = recursive_array_search($needle,$value)) !== false)
// add current key as 1st item in array
{ array_unshift($ret, $key); return $ret; }
}
return false;
}
所以,recursive_array_search('NameD',$arr)
return:
Array (
[0] => children
[1] => 1
[2] => children
[3] => name
)
我正在尝试构建一个功能,使我能够在复杂的层次结构中找到自己的出路。
例如,给定这个数组:
$arr=array("name"=>"NameA","children"=>array());
$arr["children"][]=array("name"=>"NameB","size"=>"38");
$arr["children"][]=array("name"=>"NameC","children"=>array("name"=>'NameD',"children"=>array()));
我想找到给定名称的完整密钥路径。例如,搜索 NameC
将 return $a=array('children',1)
和 NameD
将 return $a=array('children',1,'children')
。这将允许我使用 $arr['children'][1]['children']['name']
或 $arr[$a[0]][$a[1]][$a[2]]['name']
检索 NameD
。
我已经尝试在每个级别调用此函数:
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
$current_key=$key;
if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
return $current_key;
}
}
return false;
}
But recursive_array_search('NameC')
returns 'children'
instead of returning 1. 我试过以多种方式修改它,但无济于事。
请注意,我无法更改原始数组的结构,因为我正在使用它来构建需要具有此结构的 JSON 数组。
如有任何帮助,我们将不胜感激。
我在数组中收集路径
function recursive_array_search($needle,$haystack) {
foreach($haystack as $key=>$value) {
// found - create array and put lower key
if($needle===$value) return(array($key));
if (is_array($value) && ($ret = recursive_array_search($needle,$value)) !== false)
// add current key as 1st item in array
{ array_unshift($ret, $key); return $ret; }
}
return false;
}
所以,recursive_array_search('NameD',$arr)
return:
Array (
[0] => children
[1] => 1
[2] => children
[3] => name
)