递归array_key_search函数PhP

时间:2017-03-28 15:17:28

标签: php performance recursion

具有此递归函数($key可以是array(0=>'value1',1=>'value2'stringarray('key1'=>'value1','key2'=>'value2')),为$key, 针和$array haystack:

 public function array_key_search($searched_key, $array = array()){

         * @param   $searched_key: Key to search.
         *          $array: Array with keys to check.
         * Recursive method to check if a key exists in a multidemensional array. 
         * If key exists, it returns corresponding value.
         */

        foreach($array as $key => $value){
            $key = "$key";
            if($key_value == false){
                if($key == $searched_key){
                    return $value;
                }else{
                    if(is_array($value)){
                        $key_value = self::array_key_search($searched_key, $value);
                    }
                }
            }
        }
        $key_value == is_null($key_value) ? false : $key_value;

        return $key_value;
    }

我可以使用if($key === $searched_key)而不是调用我的$ key param作为比较字符串吗?

这次我谈论的是性能,因为这个功能有时很难处理。

1 个答案:

答案 0 :(得分:0)

这就是你想要的

$arr = [
  'key1' => [
    'key1.1' => [
      'key1.1.1' => 'key1.1.1',
      'key1.1.2' => 'key1.1.2'
    ],
    'key1.2' => [
      'key1.2.1' => 'key1.2.1',
      'key1.2.2' => 'key1.2.2'
    ],
  ],
  'key2' => [
    'key2.1' => [
      'key2.1.1' => 'key2.1.1',
      'key2.1.2' => 'key2.1.2'
    ]
  ]
];

function get_key_val($search_key, $arr){
  foreach($arr as $key => $value){
    if( is_array($value) ){
      $result = get_key_val($search_key, $value);
      if ($result){
        return $result;
      }
    }else{
      if ($search_key == $key){
       return $value;
      }
    }
  }
  return null;
}

var_dump(get_key_val('key2.1.2', $arr));

RETURNS

string(8) "key2.1.2"