【问题标题】:How to get the key name in PHP? [duplicate]如何在 PHP 中获取键名? [复制]
【发布时间】:2021-09-04 05:33:36
【问题描述】:

我最近有一个项目,我必须创建一个必须是关联的三维数组。

所以我定义了一个像这样的三维数组:

$movies = array(
    "Action" => array(
        array(
            "Title" => "Nobody",
            "Year Released" => "2021"
        ),
        array(
            "Title" => "Monster Hunter",
            "Year Released" => "2020"
        ),
        array(
            "Title" => "Tenet",
            "Year Released" => "2020"
        ),
        array(
            "Title" => "The Hitman's Bodyguard",
            "Year Released" => "2017"
        ),
        array(
            "Title" => "Wrath of Man",
            "Year Released" => "2021"
        )
    ),

    "Comedy" => array(
        array(
            "Title" => "The Hangover",
            "Year Released" => "2009"
        ),
        array(
            "Title" => "Minions",
            "Year Released" => "2015"
        ),
        array(
            "Title" => "Deadpool",
            "Year Released" => "2016"
        ),
        array(
            "Title" => "Scary Movie",
            "Year Released" => "2000"
        ),
        array(
            "Title" => "Blockers",
            "Year Released" => "2018"
        )
    )
);

我试图展示电影的类型,以及它们的标题和发行年份。但是,每当我尝试获取流派时,我都会得到 Array。这是我使用的代码:

foreach ($movies as $genres) {
    echo "$genres <br>";

    while (list ($index, $array) = each ($genres)) {
        echo "Movie number: $index <br>";
    
        while (list ($k, $v) = each ($array)) {
            echo "$k - $v <br>";
        }
        echo "<br>";
    }
    echo "<br>";
}

部分结果(在实际页面上,每行分为四行。只是这个网站在弄乱结果。):

数组 影片编号:0 标题 - 没有人 发布年份 - 2021 年

电影编号:1 头衔 - 怪物猎人 发布年份 - 2020

电影编号:2 标题 - 宗旨 发布年份 - 2020

电影编号:3 头衔 - 杀手的保镖 发布年份 - 2017 年

电影编号:4 标题 - 人类之怒 发布年份 - 2021 年

我如何获得流派的名称?

【问题讨论】:

    标签: php arrays multidimensional-array foreach associative-array


    【解决方案1】:

    阅读foreach manual

    foreach 有两种语法

    foreach (iterable_expression as $value)
        statement
    
    foreach (iterable_expression as $key => $value)
        statement
    

    来自 php.net,

    第一种形式遍历由iterable_expression给出的iterable。在每次迭代中,当前元素的值都分配给 $value。

    第二种形式会在每次迭代时将当前元素的键额外分配给 $key 变量。

    我会这样重写你的代码

    printEach($movies);
    
    function printEach($array) {
      echo "<br><br>";
      foreach ($array as $key => $value) {
        echo $key;
        if (is_array($value)) {
           printEach($value); // Recursive
        } else {
          echo " - ".$value."<br><br>";
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      你可以在for each循环中使用key语法

      foreach ($movies as $genreName => $genres) {
          echo "$genreName <br>";
      
          while (list ($index, $array) = each ($genres)) {
              echo "Movie number: $index <br>";
          
              while (list ($k, $v) = each ($array)) {
                  echo "$k - $v <br>";
              }
              echo "<br>";
          }
          echo "<br>";
      }
      

      【讨论】:

        猜你喜欢
        • 2012-05-09
        • 2013-01-29
        • 2020-07-23
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-25
        • 2023-03-10
        • 1970-01-01
        相关资源
        最近更新 更多