【问题标题】:Working out averages using two dimensional arrays in PHP在 PHP 中使用二维数组计算平均值
【发布时间】:2017-05-02 19:46:13
【问题描述】:

我是 PHP 编码的新手,我正在尝试找出我的学生的平均分,以便他们可以在在线表格上查看。如何在 PHP 中使用二维数组找到以下平均值?

             Maths English Science
Student 1     50     92      62
Student 2     84     71      76
Student 3     67     87      68

我需要以下平均值:

  • 学生 1 所有科目的平均成绩
  • 学生 2 所有科目的平均成绩
  • 学生 3 所有科目的平均成绩
  • 所有 3 名学生的数学平均成绩
  • 三个学生的平均英语水平
  • 三名学生的科学平均成绩

这是我目前所拥有的:

<?php
$classMarks = array
(
'student 1' => array(50,92,62),
'student 2' => array(84,71,76),
'student 3' => array(67,87,68),
'maths' => array(50,84,67),
'english' => array(92,71,87),
'science' => array(62,76,68),
);

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    无需复制数据,直接使用即可:

    $classMarks = array
    (
    'student 1' => array(50,92,62),
    'student 2' => array(84,71,76),
    'student 3' => array(67,87,68),
    );
    

    对于学生,将特定学生的分数相加,在本例中为 student 1,然后除以分数:

    $student1 = array_sum($classMarks['student 1']) / count($classMarks['student 1']);
    

    对于受试者,由于maths 位于第一个位置(偏移量 0),因此提取偏移量 0 中的所有值,english 将是偏移量 1 等,并以相同的方式计算平均值:

    $maths   = array_sum($subj = array_column($classMarks, 0)) / count($subj);
    $english = array_sum($subj = array_column($classMarks, 1)) / count($subj);
    

    但更有意义的结构可能是:

    $classMarks = array
    (
    'student 1' => array('maths'=>50,'english'=>92,'science'=>62),
    'student 2' => array('maths'=>84,'english'=>71,'science'=>76),
    'student 3' => array('maths'=>67,'english'=>87,'science'=>68),
    );
    

    然后通过maths等键访问主题:

    $maths = array_sum($subj = array_column($classMarks, 'maths')) / count($subj);
    

    【讨论】:

    • 所以对于英语它会是: $english = array_sum($d =array_column($classMarks, 'english')) / count ($d); ?
    • 不,英语将偏移1,因为它出现在数组中的第二位。我已编辑,我将使用我建议的第二种结构,因此您只需使用 english
    【解决方案2】:

    如果你得到问题中结构的数组,你可以用这种方式计算平均值

    $avg = array();
    
    foreach($classMarks as $k=>$v) {
      $avg[$k] = array_sum($classMarks[$k]) / count($classMarks[$k]);
    }
    
    print_r($avg);
    

    【讨论】:

      【解决方案3】:

      一个foreach循环

      循环每个元素作为学生键 = > 平均值 然后将它们相加,位置 0 1 和 2,然后除以 3(3 分)。我把它分解了,所以你可以看到步骤,但它可以在 1 行内完成。

      然后创建保存平均值的新数组

      foreach($classMarks as $student => $averages){
      
      $averaged = $averages[0] + $averages[1] + $averages[3];
      $averaged = $average / count($classMarks($student);
      $newArray[] = [$student = > averaged];
      }
      
      print_r($newArray);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多