我怎样才能获得"路径"多维数组中的键的关键字?

时间:2016-05-03 09:53:18

标签: php arrays multidimensional-array

我有一个多维数组:

$array = ["farm"=>
              [
                "horse"=>
                 [
                  "horseman"=>
                     [
                      "fred1"=>  "fred1",
                      "fred2"=> "fred2",
                      "fred3"=>"fred3",
                      "fred4"=>  "fred4"
                    ],
                 "horseman2"=>
                    ["john"=> "john"]
                  ]  
              ]
    ];  

我在这个数组中搜索特定的键:

    function findKey($array, $keySearch) {
    foreach ($array as $key => $item) {
      $basePath = $basePath === null ? $key : $basePath. "/" . $key;
        if (stripos($key, $keySearch) !== false){
        echo "<li>Path:".$basePath."</li>"; 
            echo "<li>".$key."</li>";
         }   
        if (is_array($item))
           findKey($item, $keySearch); 
    }
}

findKey($array, 'horse');

我需要的只是&#34;路径&#34;我的结果钥匙。

但我的结果是:

  • 路径:马
  • 路径:骑手
  • 骑手
  • https://eval.in/564230

    我尝试了很多方法,但我无法实现我所需要的:(

    这里有一些例子:

     findKey($array, 'horse');
    

  • 路径:农场
  • 路径:农场/马
  • 骑手
  • 路径:农场/马
  • horseman2
  • findKey($array, 'horseman');
    

  • 路径:农场/马
  • 骑手
  • 路径:农场/马
  • horseman2
  • findKey($array, 'horseman2');
    

  • 路径:农场/马
  • horseman2
  • 1 个答案:

    答案 0 :(得分:1)

    尝试此功能

    在线查看脚本Script

      

    因为你一次又一次地调用同一个函数,所以你输掉了   值basepath。所以每次调用函数时都要传递它。

    function findKey($array, $keySearch, $basePath) {
        $basePath2 = '';
        foreach ($array as $key => $item) {
            $basePath = ($basePath == "") ? $key : $basePath. "/" . $key;
            if($key == $keySearch){
                if(is_array($item)){
                    foreach($item as $key2 => $value){
                        $basePath2 = ($basePath2 == "") ? $key : $basePath2. "/" . $key;
                        echo "<li>Path:".$basePath."</li>"; 
                        echo "<li>".$key2."</li>";
                    }
                }           
                break;
            }else{
                if(is_array($item)){
                    foreach($item as $key3 => $value3){
                        echo "<li>Path:".$basePath."</li>";
                        echo "<li>".$key3."</li>";
                    }               
                }
            }
    
            if(is_array($item))
                findKey($item, $keySearch, $basePath);
        }
    }
    findKey($array, 'horse', '');
    

    <强>结果

    • 路径:农场
    • 路径:农场/马
    • 骑手
    • 路径:农场/马
    • horseman2