2013-02-12 19 views
0

我有一個數組從而得到密鑰(得到這個使用var_dump):試圖給定的值從多維數組

array 
    0 => 
    array 
     'post_id' => string '6' (length=1) 
    1 => 
    array 
     'post_id' => string '9' (length=1) 

我想拿到鑰匙時,我剛纔的post_id。例如,如果我有'6',我想'0',如果我有'9',我想要'1'。我曾嘗試過:

$key = array_keys($subs, array_keys($subs[??], 6)); 

假設$subs是數組。問題是,我不知道如何遍歷「父」數組內的數組,因此,'??'

回答

1

我會用array_filter()use來做到這一點。像這樣:

$array; // your array 
$needle; // the value you are looking for 
$filtered_array = array_filter($array, function ($element) use ($needle) { 
    return ($element['post_id'] === $needle); 
}); 

$matching_keys = array_keys($filtered_array); 

array_filter()將輸入數組過濾下降到僅具有針對post_id該的$needle值相匹配的值的那些陣列元件陣列。您可以使用array_keys在應用過濾器後獲取其餘元素的鍵值。

+0

我不斷收到空數組,所有數組保存$ array。 :s – IROEGBU 2013-02-12 22:43:53

+0

@iroegbu只需確保並檢查條件,如果您的鍵值較長,則表示整型的字符串值表示形式,並使用針的實際整數,則此操作將返回false以進行比較。在這種情況下,您可能需要使用'=='進行比較。嘗試在過濾器函數中傾銷'$ element'和'$ needle',以查看您實際正在比較的內容。 – 2013-02-12 23:27:28

1
$post_id_to_find = '6'; 
$key = ''; 
foreach ($subs as $k1 => $v1) 
{ 
    foreach ($v1 as $k2 => $v2) 
    { 
     if ($post_id_to_find == $v2) 
     { 
      $key = $k1; 
      break; 
     } 
    } 
} 

從本質上講這是什麼代碼所做的就是通過外部陣列以及通過內部陣列的每個元素循環迴路,如果發現你希望它會設置在initalized環路外側,以便變量的帖子ID在你打破循環後,你將擁有合適的鑰匙。


編輯

這其實是一個相當糟糕的答案,我意識到你並不真正需要的內循環,因爲你知道你要在內部陣列檢查什麼鍵...無論如何好像你用了另一個答案,所以這是非常沒有意義的。

+0

這將返回內部數組的密鑰,我需要外部數組的密鑰 – IROEGBU 2013-02-12 22:14:45

+0

請僅包含解答您的答案,而不是僅發佈代碼。 – 2013-02-12 22:21:28

+2

@iroegbu用'$ key = $ k1;'替換他的'$ key = $ k2;'來獲得外部數組鍵值。 – mkaatman 2013-02-12 22:31:08