【问题标题】:Print a key in a PHP multidimensional array在 PHP 多维数组中打印一个键
【发布时间】:2015-04-13 09:18:21
【问题描述】:

我有一个多维数组,我想打印内容如下:

Sam
class1: 76
class2: 62
class3: 56
class4: 60

Matt
class1: 76
class2: 62
class3: 56
class4: 60

Dave
class1: 76
class2: 62
class3: 56
class4: 60

Steve
class1: 76
class2: 62
class3: 56
class4: 60

我的问题是我不知道如何引用第一个子数组的键(名称)。 key($index) 只是将输出中的所有名称替换为“class1”。到目前为止,这是我的代码:

$scoreList = array(
    "Sam" => array(
        "class1" => 76,
        "class2" => 62,
        "class3" => 56,
        "class4" => 60,
        ),
    "Matt" => array(
        "class1" => 76,
        "class2" => 62,
        "class3" => 56,
        "class4" => 60,
        ),
    "Dave" => array(
        "class1" => 76,
        "class2" => 62,
        "class3" => 56,
        "class4" => 60,
        ),
    "Steve" => array(
        "class1" => 76,
        "class2" => 62,
        "class3" => 56,
        "class4" => 60,
        ));

printGrade($scoreList["Sam"]);
printGrade($scoreList["Matt"]);
printGrade($scoreList["Dave"]);
printGrade($scoreList["Steve"]);

function printGrade($index) {
    Print key($index)."<br>";
    for($i = 1; $i <= 4; $i++)
    {
        Print "class".$i.": ".$index["class".$i]."<br>";
    };
    echo "<br>";
}

我是网络开发的新手,所以如果有人有任何提示,我将非常感激!

编辑:我是不是越来越近了……?

function printGrade($index) {
        foreach ($index as &$value) {
        print array_keys($index).": ".$value."<br>";
    }
    echo "<br>";
}

【问题讨论】:

  • 请学习如何使用foreach循环!
  • @Rizier123 我是不是越来越近了……?我在帖子底部添加了一个foreach 循环,但它仍然无法按预期工作......
  • 为什么这么多人非要帮忙而不是做傻事?

标签: php arrays multidimensional-array syntax echo


【解决方案1】:

试试这个:

foreach($scoreList as $key => $val)
{
    echo $key."</br>";
    foreach( $val as $keyItem => $valKey)
    {
        echo $keyItem ." : ".$valKey."</br>";
    }
}   

输出:

Sam
class1 : 76
class2 : 62
class3 : 56
class4 : 60
Matt
class1 : 76
class2 : 62
class3 : 56
class4 : 60
Dave
class1 : 76
class2 : 62
class3 : 56
class4 : 60
Steve
class1 : 76
class2 : 62
class3 : 56
class4 : 60

【讨论】:

  • 太棒了!它完美地工作。直到五分钟前我才知道foreach 循环存在,我现在会一直使用它们!谢谢!
【解决方案2】:

这可以通过递归函数调用来完成:

function printGrade($scoreList) {
    foreach($scoreList as $key=>$score) {
        echo $key;
        if(is_array($score)) {
            echo "<br/>";
            printGrade($score);
        } else {
            echo ": $score<br/>";
        }
    }
}

【讨论】:

    【解决方案3】:
    <<!DOCTYPE html>
    <html>
    <body>
    
    <?php
    
    $scoreList = array(
        "Sam" => array(
            "class 1" => 76,
            "class 2" => 62,
            "class 3" => 56,
            "class 4" => 60,
            ),
        "Matt" => array(
            "class 1" => 76,
            "class 2" => 62,
            "class 3" => 56,
            "class 4" => 60,
            ),
        "Dave" => array(
            "class 1" => 76,
            "class 2" => 62,
            "class 3" => 56,
            "class 4" => 60,
            ),
        "Steve" => array(
            "class 1" => 76,
            "class 2" => 62,
            "class 3" => 56,
            "class 4" => 60,
            ));
    
     echo "Sam: ". "<br>"."<br>";
     echo "class 1:&nbsp&nbsp". $scoreList ['Sam'] ['class 1']. "<br>";
     echo "class 2:&nbsp&nbsp". $scoreList ['Sam'] ['class 2']. "<br>";
     echo "class 3:&nbsp&nbsp". $scoreList ['Sam'] ['class 3']. "<br>";
     echo "class 4:&nbsp&nbsp". $scoreList ['Sam'] ['class 4']. "<br>"."<br>";
    
     echo "Matt: ". "<br>"."<br>";
     echo "class 1:&nbsp&nbsp". $scoreList ['Matt'] ['class 1']. "<br>";
     echo "class 2:&nbsp&nbsp". $scoreList ['Matt'] ['class 2']. "<br>";
     echo "class 3:&nbsp&nbsp". $scoreList ['Matt'] ['class 3']. "<br>";
     echo "class 4:&nbsp&nbsp". $scoreList ['Matt'] ['class 4']. "<br>"."<br>";
    
     echo "Dav: ". "<br>"."<br>";
     echo "class 1:&nbsp&nbsp". $scoreList ['Dave'] ['class 1']. "<br>";
     echo "class 2:&nbsp&nbsp". $scoreList ['Dave'] ['class 2']. "<br>";
     echo "class 3:&nbsp&nbsp". $scoreList ['Dave'] ['class 3']. "<br>";
     echo "class 4:&nbsp&nbsp". $scoreList ['Dave'] ['class 4']. "<br>"."<br>";
    
     echo "Steve: ". "<br>"."<br>";
     echo "class 1:&nbsp&nbsp". $scoreList ['Steve'] ['class 1']. "<br>";
     echo "class 2:&nbsp&nbsp". $scoreList ['Steve'] ['class 2']. "<br>";
     echo "class 3:&nbsp&nbsp". $scoreList ['Steve'] ['class 3']. "<br>";
     echo "class 4:&nbsp&nbsp". $scoreList ['Steve'] ['class 4']. "<br>"."<br>";
    
    ?>
    
    </body>
    </html>
    

    【讨论】:

    • 虽然这段代码可能会解决问题,包括解释如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
    【解决方案4】:

    仅使用 一个 foreach 将所有内部数组 ($val) 回显为 key: value 对,使用 implode(glue, pieces) 粘合&lt;/br&gt; 新行。为了打印key: value,我使用array_map和回调fn返回格式$k: $v,其中$k$v分别来自array_keysarray_values

    foreach($scoreList as $key => $val)
    {
        echo $key."</br>";
        echo implode("</br>", array_map(
            fn($k,$v)=>"$k: $v", 
            array_keys($val),
            array_values($val)
          )
        );
        echo "</br></br>";
    }
    

    输出如你预期

    Sam
    class1: 76
    class2: 62
    class3: 56
    class4: 60
    
    Matt
    class1: 76
    class2: 62
    class3: 56
    class4: 60
    
    Dave
    class1: 76
    class2: 62
    class3: 56
    class4: 60
    
    Steve
    class1: 76
    class2: 62
    class3: 56
    class4: 60
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 2021-07-19
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多