如何在多维数组中获取一个数组键的parent,grandparent和grandgrand父键?

时间:2016-04-07 14:05:47

标签: php arrays multidimensional-array

这是我的阵列:

array(1) {
  ["farm"]=>
  array(2) {
    ["folder1"]=>
    array(2) {
      ["horse"]=>
      array(1) {
        ["fred"]=>
        string(4) "fred"
      }
      ["cat"]=>
      array(1) {
        ["john"]=>
        string(4) "john"
      }
    }
    ["folder2"]=>
    array(1) {
      ["cat"]=>
      array(2) {
        ["sam"]=>
        string(3) "sam"
        ["cat"]=>
        array(1) {
          ["john"]=>
          string(4) "john"
        }
      }
    }
  }
}

这是我的功能:

    $search = "folder1";
    get_values($arr);

   function get_values($arr, $id){  
        global $search;
        foreach($arr as $key => $value){

            if($key == $search){

                if(is_array($value)){

                    foreach( $value as $k => $v ) {
                        echo $k;
                    }   
                }           
            }else{
                get_values($value, $id ); 
            }      
        }      
    }

我的结果:

horse
cat

我不仅需要数组键。我还想打印所有父母(父母,祖父母直到根)键。 结果我需要:

farm/folder1/horse
farm/folder1/cat

我能得到的就是这个。但在这里,我只得到父母而不是盛大和祖父母:

  foreach( $value as $k => $v ) {
       echo $key."/".$k;
  } 

结果是

folder1/horse
folder1/cat

1 个答案:

答案 0 :(得分:1)

为您的函数添加路径参数。

$search = "folder1";
get_values($arr, null);

function get_values($arr, $path, $id){  
    global $search;
    foreach($arr as $key => $value){
        $basePath = $path === null ? $key : $path. "/" . $key;
        if($key == $search){

            if(is_array($value)){

                foreach( $value as $k => $v ) {
                    echo $basePath . '/' . $k;
                }   
            }           
        }else{
            get_values($value, $basePath, $id); 
        }      
    }      
}