简体   繁体   English

打印 PHP 多维数组中的键

[英]Print a key in a PHP multidimensional array

I have a multidimensional array and I want to print the contents as follows:我有一个多维数组,我想按如下方式打印内容:

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

My problem is that I don't know how to refer to the key of the first sub-array (the names).我的问题是我不知道如何引用第一个子数组的键(名称)。 key($index) just replaces all of the names in the output with "class1". key($index)只是将输出中的所有名称替换为“class1”。 Here's my code so far:到目前为止,这是我的代码:

$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>";
}

I'm pretty new to web development, so if anyone has any hints I'd really appreciate it!我对 Web 开发还很陌生,所以如果有人有任何提示,我将不胜感激!

Edit: Am I getting closer...?编辑:我是不是越来越近了......?

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

This can be done with a recursive function call:这可以通过递归函数调用来完成:

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

Try with this :试试这个:

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

Out put:输出:

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
<<!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>

Using only one foreach with echo out all inner arrays ( $val ) as key: value pairs, using implode(glue, pieces) which glue is </br> new line.仅使用一个 foreach并回显所有内部数组( $val )作为key: value对,使用implode(glue, pieces) ,其中胶水</br>新行。 To print key: value , I used array_map with callback fn return format $k: $v , which $k and $v are from array_keys and array_values respectively.要打印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>";
}

Output as you Expect预期输出

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM