【问题标题】:PHP Multi-dimensional array count and sum in tablePHP多维数组计数和表中的总和
【发布时间】:2021-11-23 19:14:01
【问题描述】:

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

你能帮忙猜猜逻辑并编写工作(例如foreachfor循环)PHP代码?

这是我的多维数组: (!!Teacher 3 Grade 1 数组中可能有更多的人分组在一个年级中 !!

            $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",
                ),
            );

想象的表格结果:

感谢大家的帮助!

【问题讨论】:

    标签: php arrays multidimensional-array counting


    【解决方案1】:

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

    您想要的输出基本上是一个平面表(如果它是一个数据库表,则应该对其进行规范化;那么您将不会被限制为每个年级 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",
         ),
     );
    

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

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

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

    如果这是学校的项目,请继续;大多数学校课程都没有解决做事的实际方法。在现实世界中,您会使用数据库而不是这个笨重的数组。

    【讨论】:

      【解决方案2】:

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

      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>";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多