首页 > 解决方案 > 如何为具有混合列值的关联数组生成分组依据和平均报告

问题描述

我有这个数据数组

Array(
    [0] => Array
        (
            [mclass] => 9
            [mname] => Astik
            [mmarks] => 480
            [midno] => M199
            [fclass] => 10B
            [fname] => Priya
            [fmarks] => 490
            [fidno] => F200
        )

    [1] => Array
        (
            [mclass] => 9
            [mname] => Vikas
            [mmarks] => 470
            [midno] => M129
            [fclass] => 10B
            [fname] => Sakshi
            [fmarks] => 480
            [fidno] => F205
        )

    [2] => Array
        (
            [mclass] => 9
            [mname] => Tejas
            [mmarks] => 476
            [midno] => M220
            [fclass] => 10B
            [fname] => Kriya
            [fmarks] => 499
            [fidno] => F108
        )

    [3] => Array
        (
            [mclass] => 10
            [mname] => Mishra
            [mmarks] => 499
            [midno] => M390
            [fclass] =>  
            [fname] =>  
            [fmarks] =>  
            [fidno] =>  
        )
    [4] => Array
        (
            [mclass] => 
            [mname] => 
            [mmarks] => 
            [midno] =>  
            [fclass] => 10
            [fname] => Vani
            [fmarks] => 500
            [fidno] => F360
        )

)

我不知道如何进行换行以获得
1. 男孩平均等到所有女孩列表都完成
2. 显示平均值。

我无法控制这个混合顺序存储数组。最大时,我可以将该数组拆分为 Boy 数组和 Girl 数组,但如何显示将是另一个查询范围。现在,有了这些数据,我发现很难达到所描述的显示格式。

以下是我使用以下代码得到的输出

    Boys    Marks   Girls   Marks
    Astik   480 Priya   490
    Vikas   470 Sakshi  480
    Tejas   476 Kriya   499
    Mishra  499 Vani    500

我试过的代码是

foreach ($bsarr as $bkey => $bvalue) {
    if (isset($bvalue['mname']) && isset($bvalue['fname']) ){
        echo "<tr> <td>".$bvalue['mname']."</td><td>".$bvalue['mmarks']."</td><td></td><td>".$bvalue['fname'] ."</td><td>".$bvalue['fmarks']."</td></tr>"; 
    }

    if (isset($bvalue['mname']) && !isset($bvalue['fname']) ){
        echo "<tr> <td>".$bvalue['mname']."</td><td>".$bvalue['mmarks']."</td><td></td><td>  </td><td>  </td></tr>";

    }
    if (!isset($bvalue['mname']) &&  isset($bvalue['fname']) ){
        echo  "<tr><td></td><td>  </td><td></td><td>".$bvalue['fname'] ." </td> <td>".$bvalue['fmarks']."</td><td></td></tr>"; 
    }
 } 

我希望打破 9 级男孩的分数,并排 10 级女孩的分数,然后 10 级男孩低于 9 级男孩的平均分数。

            Boys    Marks   Girls   Marks
            Astik   480     Priya   490
            Vikas   470     Sakshi  480
            Tejas   476     Kriya   499
                            Vani    500
                   Avg  xxx         Avg xxx
               ------------        ------------
            Mishra  499
                    Avg xxx
               ------------

标签: phphtmlarrays

解决方案


您的表没有针对此任务进行很好的优化。

  1. 您应该有一个结构如下的配置文件表:

    Profile (idno, name, gender)
    
  2. 您应该有一个结构如下的类的表:

    ClassRoom (id_PK, class_title)
    
  3. 您应该有另一个表,其中存储具有此结构的每个学生的不同分数项目:

    Scores (id_PK, profile_id, class_id, score)
    

这样,您就不必为让一个班级的男学生和女学生都将他们的数据排成一行而苦苦挣扎。您还可以轻松地查询数据库并运行 Group By 和 Avg SQL 聚合函数。您也可以按性别订购。

试试这个,看看它是否有帮助。谢谢


推荐阅读