PHP table 中的多维数组计数和求和

PHP Multi-dimensional array count and sum in table

我的示例是关于 table 的 table 教师,grades/groups 和 PHP 生成的学生。我想计算每行一个年级的人数(如下面的 table 所示)。 您可以在下面看到想象中生成的 table 和结果。我用 foreachesfor 循环尝试了一些解决方案但是效果不佳。我不明白获得井周期的正确逻辑,所以我不知道如何解决它。

你能帮忙猜猜逻辑并写出工作(例如foreach, 对于 周期)PHP 代码?

这是我的多维数组: (!! 一个年级可能会有更多人分组,比如 老师 3 年级 array !!)

            $array = array (
                "teacher1" => array(
                    "grades" => array(
                        "grade 4" => array(
                            0 => 1,
                        ),
                    ),
                    "sum" => 1,
                    "name" => "teacher1",
                ),
                "teacher2" => array(
                    "grades" => array(
                        "grade 8" => array(
                            0 => 5,
                        ),
                        "grade 1" => array(
                            0 => 4,
                        ),
                    ),
                    "sum" => 9,
                    "name" => "teacher2",
                ),
                "teacher3" => array(
                    "grades" => array(
                        "grade 1" => array(
                            0 => 2,
                            1 => 1,
                        ),
                        "grade 4" => array(
                            0 => 1,
                        ),
                        "grade 5" => array(
                            0 => 1,
                        ),
                        "grade 2" => array(
                            0 => 1,
                        ),
                    ),
                    "sum" => 6,
                    "name" => "teacher3",
                ),
            );

想象的table结果:

感谢大家的帮助!

希望此解决方案对您的情况有所帮助。

foreach($array as $teacher)
{
    echo $teacher['name'];
    echo "<br>";

    $grades = $teacher['grades'];

    foreach($grades as $key => $grade)
    { 
        $count = 0;

        foreach($grade as $arr)
        {
            $count += $arr;
        }
        
        echo "Total students in " . $key . " is = " . $count . "<br>";
    }
    
    echo "<br>";
}

像这样庞大的数据结构需要在开始时进行大量规划,而您 运行 遇到麻烦的地方是最里面的数组。您没有坚持使用命名数组,而是切换到索引数组,其中索引毫无意义。

你想要的输出基本上是一个平面 table(如果它是一个数据库 table,应该被规范化;那么你不会被限制为每个年级 5 人),其中每个人前 32 列是唯一字段。

如果你的数据结构是这样的,会容易得多:


$array = array (
     "teacher1" => array(
         "grades" => array(
             "grade 4" => array(
                 "1" => true,
             ),
         ),
         "sum" => 1,
         "name" => "teacher1",
     ),
     "teacher2" => array(
         "grades" => array(
             "grade 8" => array(
                 "5" => true,
             ),
             "grade 1" => array(
                 "4" => true,
             ),
         ),
         "sum" => 9,
         "name" => "teacher2",
     ),
     "teacher3" => array(
         "grades" => array(
             "grade 1" => array(
                 "2" => true,
                 "1" => true,
             ),
             "grade 4" => array(
                 "1" => true,
             ),
             "grade 5" => array(
                 "1" => true,
             ),
             "grade 2" => array(
                 "1" => true,
             ),
         ),
         "sum" => 6,
         "name" => "teacher3",
     ),
 );

现在,table 的前 32 个单元格中的每一个都有一个不同的名称,即

if(isset($array['teacher2']['grades']['grade1']['4'])) { echo ‘x'; }

当然,问题在于输入起来相当冗长。您自然会希望使用 foreach 循环来深入研究数据结构,并且您可以为遇到的每个“人数”键设置计数数组……但是哎呀!

如果这是学校的项目,那就继续吧;大多数学校课程都不涉及做事的实用方法。在现实世界中,您会使用数据库而不是这个笨重的数组。