使用适当的索引进行递归数组搜索

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 
)