php - 如何为具有混合列值的关联数组生成分组依据和平均报告
问题描述
我有这个数据数组
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
------------
解决方案
您的表没有针对此任务进行很好的优化。
您应该有一个结构如下的配置文件表:
Profile (idno, name, gender)
您应该有一个结构如下的类的表:
ClassRoom (id_PK, class_title)
您应该有另一个表,其中存储具有此结构的每个学生的不同分数项目:
Scores (id_PK, profile_id, class_id, score)
这样,您就不必为让一个班级的男学生和女学生都将他们的数据排成一行而苦苦挣扎。您还可以轻松地查询数据库并运行 Group By 和 Avg SQL 聚合函数。您也可以按性别订购。
试试这个,看看它是否有帮助。谢谢
推荐阅读
- flutter - 我的应用栏上方的这个额外空间是什么?
- javascript - 为什么我的按钮在 vscode 的实时服务器中无法正常运行?(javascript)
- c# - 在 C# .NET 中读取 CSV 而无需输入字段名称
- javascript - 事件循环处理的回调是否完成?
- python - 你可以在 python 中循环创建类吗?
- exception - 无法在 grails 中的空对象上获取属性“显示”
- android - 一些搭载 Android 6 或更高版本的三星手机没有 android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS
- elasticsearch - ElasticSearch:查询今天是否在列表中的开始日期和结束日期之间
- sql - 查找字符串是否在数据库中
- swift - RealmSwift:列出所有活动的通知令牌