2017-03-28 6 views
0

Mit dieser rekursive Funktion ($key kann als array(0=>'value1',1=>'value2' oder string als array('key1'=>'value1','key2'=>'value2') numerisch sein), wobei $key, Nadel und $array Heuhaufen:rekursive array_key_search Funktion PhP

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; 
    } 

ich if($key === $searched_key) stattdessen meine $ Schlüssel verwenden kann, von Aufrufen Parameter als String zum Vergleich?

Diesmal spreche ich über Leistung, weil diese Funktion manchmal schwer zu verarbeiten ist.

Antwort

0

Dies tut, was Sie wollen

$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" 
+0

Ich bin mit Ihrer Methode einverstanden, aber dass es nicht die Antwort, die ich gesucht habe. Danke trotzdem! :) –

+0

@NachoNieva was suchen Sie? –