【问题标题】:PHP How to echo an array key if value exists in multidimensional array如果值存在于多维数组中,PHP如何回显数组键
【发布时间】:2014-02-20 20:15:18
【问题描述】:

在下面的数组中,我想搜索名字,例如 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

【问题讨论】:

  • 您缺少数组级别。 $arr['canteen'][1]['lastname'] =&gt; jones
  • 你能接受答案吗,@user2664370?我看到你是新成员(我也是新成员)。如果它解决了您的问题,您应该接受答案。

标签: php arrays multidimensional-array foreach


【解决方案1】:

问题是你只遍历第一个维度,但你的数组是二维的。这是固定的代码:

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 中,并将值 array(...) 存储在 $va 中。
哦,另一个 foreach... 现在我应该遍历 $va($school['library'] 的值)。我应该将 $v['firstname'] 设置为“tom”,将 lastname 设置为“brown”。
检查没问题,回显键“库”。
Foreach 退出,“库”中不再有条目。
第一个 foreach 仍然存在:它应该将 $k 设置为 canteen 并将 $va 设置为 array(...)。
开始新的 foreach,遍历 $va($school['canteen']),将键 'canteen' 放到 $k...
$v 现在是 Array("firstname" => "matt", "lastname" => "smith");
名字不是“汤姆”。学校[食堂]的下一个价值。
$v 现在是 Array("firstname" => "tom", "lastname" => "jones");
名字是 tom,与 $k 中的键相呼应,它是 'canteen'。
数组结束,两个 foreach 都退出。

【讨论】:

  • 非常感谢您的帮助!它工作得很好。由于您的解释,这完全有道理。可惜我还不能投票:(
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你需要另一个 foreach 循环

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多