2010-07-02 59 views
0

前段時間我已經發布了一個類似的問題,但現在它有所不同,所以請不要將其作爲副本關閉。我有多維數組。我需要一個函數來查找給定數組鍵的位置(我所有的數組鍵都是字符串),然後返回數組中鍵的位置,作爲數組。PHP:動態查找多維數組中的關鍵位置

下面是一個例子數組:

 
$arr = array 
(
    'fruit' => array(
     'apples' => array(), 
     'oranges' => array(), 
     'bananas' => array() 
    ), 
    'vegetables' => array(
     'tomatoes' => array(), 
     'carrots' => array(), 
     'celery' => array(), 
     'beets' => array 
     (
      'bears' => array(), 
      'battlestar-galactica' => array() 
     ), 
    ), 
    'meat' => array(), 
    'other' => array() 
); 

該函數應具有的參數的變量/動態數(即可選參數)。參數表示我的數組的「級別」(維度)。

如果函數獲取與一個參數調用時,該函數只能尋找在陣列的第一級/維度鍵(即,在示例的那些將是'fruit''vegetables''meat''other')。
如果它被兩個參數調用,例如theFunction('vegetables', 'beets'),它應該尋找一個名爲'vegetables'的密鑰,然後尋找名爲'beets'的「子」鍵(僅在'vegetables'級別/分支/維度上!)在該示例中,它將返回array(1, 3)

當然,這應該適用於任何級別/維度。

+2

爲什麼你不使用你已知的鑰匙? Like $ arr ['vegelatbles'] ['beets']; 這將與$ arr [1] [3]相同; – JochenJung 2010-07-02 11:50:25

+3

你知道'$ arr ['secondkey']!= $ arr [1]'... – fbstj 2010-07-02 11:53:16

+2

@Jochen $ arr [1] [3]與$ arr ['vegelatbles'] ['beets 「];? – Gordon 2010-07-02 11:53:57

回答

0
function find($arr, $k1, $k2=null){ 
    if(!array_key_exists($k1, $arr)) //array level one only 
     if(array_key_exists($k1, $arr)) 
      ; 
     else 
      ; 
    else if(array_key_exists($k2, $arr[$k1])) 
     ; 
    else 
     ; 
} 
1

我看到這個問題一段時間沒有任何愛,所以我會給它一個擺動。

function findKey($srcArray , $fndArray , $depth=0){ 
    if(($keyIndex[] = array_search($fndArray[$depth] , array_keys($srcArray)))!==false){ 
    if(is_array($srcArray[$fndArray[$depth]])) 
     $nextLevel = findKey($srcArray[$fndArray[$depth]] , $fndArray , $depth+1); 
    if($nextLevel===false) 
     return $keyIndex; 
    return array_merge($keyIndex , $nextLevel); 
    } 
    return false; 
} 

該功能確實使用提供的測試數據返回array(1 , 3)的數組。它將提供匹配的數組,儘可能遠地匹配(即,如果它可以匹配3箇中的前2個項目,則返回的數組將具有前2個數字)。