PHP如果多维数组中存在值,如何回显数组键

时间:2014-02-20 20:15:19

标签: php arrays multidimensional-array foreach

在下面的数组中,我想搜索firstname,例如tom,然后回显键“library”和“canteen”的名称,因为在这两个中都存储了名字为tom的人。

这是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

4 个答案:

答案 0 :(得分:0)

你需要另一个foreach循环

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

答案 1 :(得分: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并不难,但你需要先了解它。 这是“计算机说什么”母鸡运行代码: 好的,通过阵列$ school迭代了。现在我将密钥库存储在$ k中,并将值数组(...)存储在$ va中 哦,另一个foreach ......现在我应该循环$ va($ school ['library']的价值)。我应该将$ v ['firstname']设置为'tom',将lastname设置为'brown' 检查没问题,回复关键'库' Foreach退出,不再进入“图书馆”。
第一个foreach还活着:它应该将$ k设置为食堂,将$ va设置为array(...) 开始新的foreach,迭代$ va($ school ['canteen']),把关键'食堂'放到$ k ...
$ v现在为Array(“firstname”=&gt;“matt”,“lastname”=&gt;“smith”);
名字不是'汤姆'。来自学校[食堂]的下一个价值 $ v现在为Array(“firstname”=&gt;“tom”,“lastname”=&gt;“jones”);
名字是汤姆,回声来自$ k的钥匙,它是'食堂' 数组结束,两个foreach出口。

答案 2 :(得分:0)

如果$ school是外部数组,那么你可以这样做:

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

答案 3 :(得分:0)

您正在使用多维数组。因此,您需要使用两个foreach循环来遍历每个数组。