2017-05-02 136 views
1

我在PHP編碼方面很新穎,我試圖找出我的學生的平均值標記,以便他們可以在在線表單上查看它。如何在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), 
); 

回答

2

無需重複數據計算平均值,您可以使用:

$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); 
+0

所以對於英語這將是:$英語= array_sum($ d = array_column($ classMarks, '英語'))/計數($ d ); ? – Zera

+0

不,英語將會偏移'1',因爲它出現在數組中。我編輯過,我會使用我建議的第二個結構,所以你只需使用'english'。 – AbraCadaver

+0

謝謝!它非常完美! – Zera

0

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); 
0

如果你得到的結構數組中的問題,你可以這樣的方式

$avg = array(); 

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

print_r($avg);