0

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

Edit: Am I getting closer...?

function printGrade($index) {
        foreach ($index as &$value) {
        print array_keys($index).": ".$value."<br>";
    }
    echo "<br>";
}
3
  • Please learn how to use a foreach loop! Commented Apr 13, 2015 at 9:19
  • @Rizier123 Am I getting closer...? I've added a foreach loop to the bottom of the post but it still doesn't work as intended... Commented Apr 13, 2015 at 9:29
  • why do so many people have to be aasshats instead of helping? Commented May 26, 2016 at 19:36

4 Answers 4

1

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
Sign up to request clarification or add additional context in comments.

1 Comment

Brilliant! It works perfectly. I didn't even know foreach loops existed until five minutes ago, I'll use them all the time now! Thank you!
1

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

Comments

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

1 Comment

While this code may solve the question, including an explanation of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes. Remember that you are answering the question for readers in the future, not just the person asking now. Please edit your answer to add explanations and give an indication of what limitations and assumptions apply.
0

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

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.