2014-02-20 138 views
0

在下面的數組中,我想搜索firstname,例如tom,然後回顯出鍵「library」和「canteen」的名稱,因爲存儲了他們兩個都有名字叫湯姆的人。PHP如何在多維數組中存在回顯數組鍵

這是print_r($ school)的輸出;

Array 
(
    [library] => Array 
     (
      [0] => Array 
       (
        [firstname] => tom 
        [lastname] => brown 
       ) 
     ) 
) 
Array 
(
    [canteen] => Array 
     (
      [0] => Array 
       (
        [firstname] => matt 
        [lastname] => smith 

       ) 
      [1] => Array 
       (
        [firstname] => tom 
        [lastname] => jones 
       ) 
     ) 
) 

我已經做了多個嘗試與foreach循環沒有成功。我必須承認,我並不完全熟悉他們的工作方式。

這是我已經試過:

foreach ($school as $k => $v) { 
    if ($v['firstname'] == 'tom'){ 
     echo 'Currently at the '.$k.'<br>'; 
    } 
} 

這是輸出是嘩嘩的:

Currently at the library 
Currently at the canteen 
+0

您缺少數組級別。 '$ arr ['canteen'] [1] ['lastname'] => jones' –

+0

您能否接受答案,@ user2664370?我看到你是一個新成員(我也是新成員)。如果它解決了你的問題,你應該接受一個答案。 – szgal

回答

0

問題你只是迭代第一維,但你的數組是二維的。這裏是固定代碼:

foreach ($school as $k => $va) { //Iterate trough the array $school($k is the key and $va is the value) 
foreach($va as $v) { //Iterate trough $va, this is a multidimensional array. $v is the value. 
    if ($v['firstname'] == 'tom'){ 
    echo 'Currently at the '.$k; //$k is still storing the key from the first foreach. 
    } 
} 
} 

Foreach並不難,但您需要首先了解它。 這是「計算機說什麼」母雞運行代碼: 好吧,迭代通過陣列$學校。現在我將把密鑰庫存儲在$ k中,並在$ va中存儲數組(...)。
哦,另一個foreach ...現在我應該循環$ va($ school ['library']的值)。我應該將$ v ['firstname']設置爲'tom',將姓氏設置爲'brown'。
檢查無誤,請回顯「庫」鍵。
Foreach退出,沒有更多的'圖書館'條目。
第一個foreach仍然活着:它應該將$ k設置爲食堂,將$ va設置爲array(...)。
$ va($ school ['canteen']),把key'canteen'放到$ k ... 「=>」smith「);
名字不是'湯姆'。來自學校的下一個值[食堂]。
$ v現在是數組(「firstname」=>「tom」,「lastname」=>「jones」);
名字是湯姆,從$ k回顯密鑰,它是'食堂'。
數組結尾,都是foreach退出。

+0

我真的很感謝你的幫助!它工作得很好。感謝你的解釋,這完全有意義。太糟糕了,我還不能投票:( – user2664370

0

你需要另一個foreach循環

foreach ($school as $k => $v) { 
    foreach($v as $key => $value){ 
     if ($value['firstname'] == 'tom'){ 
      echo 'Currently at the ' . $k; 
     } 
    } 
} 
0

如果$學校外陣列,那麼你可以這樣做:

foreach ($school as $k => $v) { 
foreach($v as $key=>$value{ 
if ($value['firstname'] == 'tom'){ 
    echo 'Currently at the '.$key; 
} 
} 
} 
0

您使用多維數組。因此,您需要使用兩個foreach循環遍歷每個數組。