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

PHP如果多维数组中存在值,如何回显数组键,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,在下面的数组中,我想搜索firstname,例如tom,然后呼出键“library”和“食堂”的名称,因为在这两个数组中都存储了一个名为tom的人 这是print_r($school)的输出 我对foreach循环进行了多次尝试,但都没有成功。我必须承认我并不完全熟悉他们的工作方式 这就是我尝试过的: foreach ($school as $k => $v) { if ($v['firstname'] == 'tom'){ echo 'Currently at t

在下面的数组中,我想搜索firstname,例如tom,然后呼出键“library”和“食堂”的名称,因为在这两个数组中都存储了一个名为tom的人

这是print_r($school)的输出

我对foreach循环进行了多次尝试,但都没有成功。我必须承认我并不完全熟悉他们的工作方式

这就是我尝试过的:

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

您需要另一个foreach循环

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

问题是你只是在第一维度上迭代,但是你的数组是二维的。以下是固定代码:

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仍然有效:它应该将$k设置为食堂,将$va设置为数组(…)。
开始新的foreach,迭代$va($school['mechantle'),将键“mechantle”设置为$k.。
$v现在是数组(“firstname”=>“matt”,“lastname”=>“smith”)
名字不是“汤姆”。学校[食堂]的下一个价值观。
$v现在是数组(“firstname”=>“tom”,“lastname”=>“jones”)
名字是汤姆,和$k的钥匙呼应,是“食堂”。

数组结束,两个foreach都退出。

如果$school是外部数组,则可以执行以下操作:

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

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

您缺少一个数组级别<代码>$arr['lastname']=>jones你能接受一个回答@user2664370吗?我看你是新会员(我也是新会员)。如果问题解决了,你应该接受答案。我真的很感谢你的帮助!效果很好。多亏了你的解释,这完全有道理。可惜我还不能投票:(
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 as $k => $v) {
 foreach($v as $key=>$value{
if ($value['firstname'] == 'tom'){
    echo 'Currently at the '.$key;
}
}
}