PHP警告数组到数组键内的字符串转换循环


PHP warning array to string conversion loop inside array key

<?php  $student = array(
     1 => array(
         "firstname" => "first",
         "name" => "first",
         "group" => "grp01",
         "score" => array(
             "ASP" => 86,
             "PHP" => 79,
             "JAVA" => 72,
             "HTML" => 96,
             "JAVASCRIPT" => 98,
             "VBNET" => 66
         )
     ),
     2 => array(
         "firstname" => "second",
         "name" => "second",
         "group" => "grp01",
         "score" => array(
             "ASP" => 80,
             "PHP" => 70,
             "JAVA" => 71,
             "HTML" => 92,
             "JAVASCRIPT" => 90,
             "VBNET" => 78
         )
     ),
     3 => array(
         "firstname" => "third",
         "name" => "third",
         "group" => "grp02",
         "score" => array(
             "ASP" => 88,
             "PHP" => 88,
             "JAVA" => 89,
             "HTML" => 96,
             "JAVASCRIPT" => 98,
             "VBNET" => 71
         )
     )  ); ?>
<?php
foreach($student as $std) {
    foreach($std as $key => $p){
        echo $std[$key];
    } } ?>

我试图在echo中打印每个学生的平均分数,但现在我被卡住了,我得到了一个关于数组到字符串转换的警告,有人能给我一些提示,我应该如何做我的循环。

使用php函数计算每个学生的平均值,四舍五入到两位数字:

foreach($student as $std) {
    $avg = round(array_sum($std['score']) / count($std['score']), 2);
    echo $std['name']. ": $avg <br />";
}

查看它的工作情况:http://codepad.viper-7.com/RBINCd

您正在迭代错误的数组,一旦进入每个学生,您必须遍历"分数",如果不是,您试图将分数数组转换为字符串:

foreach($student as $std) {
    foreach($std["score"] as $language => $score) {
        echo $score;
    }
}

当您尝试回显数组的"score"部分时,您将获得错误。因为它本身是一个数组,所以不能以这种方式发出回声。你将需要另一个循环来加分数,然后得到平均值。

类似以下语句的内容:

foreach($student as $std) {
    foreach($std as $key => $p){
        if ( $key === 'score'){
            $avg = 0;
            foreach( $p as $score){
              $avg += $score;
            }
            $avg = ($avg/size_of($p));
         }
    } 
}