2014-02-20 59 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循环遍历每个数组。