php 求和并在多维数组中获取平均值


php Sum and get average in multidimensional Array

我正在从我的数据库中获取所有工作的数据,我得到了正确的行。但是现在我需要将它们相加并计算平均值。

我当前的代码是:

$new = array();
                foreach($testquery as $key){
                    $new[$key['school']][$key['city_id']][] = array('points'=>$key['points']);
                }

我的数组结构是这样的:

    [Etelä-Tapiolan lukio] => Array
            (
                [4] => Array
                    (
                        [0] => Array
                            (
                                [points] => 5
                            )
                        [1] => Array
                            (
                                [points] => 5
                            )
                    )
            )

    [Oulunsalo lukio] => Array
            (
                [8] => Array
                    (
                        [0] => Array
                            (
                                [points] => 4
                            )
                        [1] => Array
                            (
                                [points] => 6
                            )
                        [2] => Array
                            (
                                [points] => 6
                            )
                        [3] => Array
                            (
                                [points] => 7
                            )
                    )
            )
  [Limingan lukio] => Array
        (
            [2] => Array
                (
                    [0] => Array
                        (
                            [points] => 4
                        )
                    [1] => Array
                        (
                            [points] => 5
                        )
                    [2] => Array
                        (
                            [points] => 3
                        )
                    [3] => Array
                        (
                            [points] => 3
                        )
                    [4] => Array
                        (
                            [points] => 4
                        )
                    [5] => Array
                        (
                            [points] => 6
                        )
                    [6] => Array
                        (
                            [points] => 4
                        )
                    [7] => Array
                        (
                            [points] => 6
                        )
                    [8] => Array
                        (
                            [points] => 3
                        )
                    [9] => Array
                        (
                            [points] => 3
                        )
                    [10] => Array
                        (
                            [points] => 5
                        )
                    [11] => Array
                        (
                            [points] => 7
                        )
                )
        )
)

数组大小没有限制。现在我需要对点进行求和,然后将总和除以每个数组的点数。

输出应为:

  • Etelä-Tapiolan lukio: 5 (解释 5+5 = 10/2 = 5(

  • 奥伦萨洛卢基奥: 5,75 (解释 4+6+6+7 = 23/4 = 5,75(

  • 黎明安路基奥:4.41(解释4+5+3+3+4+6+6+6+3+3+5+7 = 53/12 = 4.41(

我还需要 ID = [4],[8],[2] 号

[Etelä-Tapiolan lukio] => Array
                (
                    [4] => Array
[Oulunsalo lukio] => Array
                (
                    [8] => Array
[Limingan lukio] => Array
                (
                    [2] => Array

最终输出将是:

<td class="4">Etelä-Tapiolan lukio:><span> 5 </span></td>
<td class="8">Oulunsalo lukio:><span> 5,75 </span></td>
<td class="2">Limingan lukio:><span> 4.41 </span></td>

通常,在这种情况下,您可以只使用 foreach。例:

$total = array();
foreach ($new as $name_key => $stats) {
    foreach($stats as $class => $info) {
        $count = count($info); // get the count of individual points
        $sum = array_sum(array_map(function($piece){ // then, sum them
            return $piece['points']; // return each points
        }, $info));
        $total[$name_key][$class] = sprintf('%1.2f', $sum / $count); // normal average
    }
}
?>
<!-- present it on a table -->
<table>
    <tr>
    <?php foreach ($total as $name => $value): ?>
        <?php foreach ($value as $class => $ave): ?>
            <td class="<?php echo $class; ?>"><?php echo $name; ?><span><?php echo $ave; ?></span></td>
        <?php endforeach; ?>
    <?php endforeach; ?>
    </tr>
</table>

示例输出