基于PHP关联数组实现分组筛选及挂科人员展示表单开发需求
实现带分组选择与挂科人员筛选的表单(结合PHP学生数据)
嘿,我来帮你搞定这个表单需求!结合你给出的$NotesGroupe1数组,我会提供一套从前端表单到后端数据处理的完整实现方案。
一、前端表单实现
首先是用户交互的表单部分,我们需要两个核心控件:
- 多选下拉框:支持选择group1、group2或同时选中两者
- 复选框:控制是否只显示挂科人员
<form method="POST" action=""> <div> <label for="group-select">选择分组:</label> <select id="group-select" name="groups[]" multiple size="3"> <option value="group1">Group 1</option> <option value="group2">Group 2</option> </select> <p>提示:按住Ctrl键可多选</p> </div> <div style="margin: 15px 0;"> <label> <input type="checkbox" name="show-failed" value="1"> 仅显示分组中挂科的人员 </label> </div> <button type="submit">提交筛选</button> </form>
二、PHP后端数据处理逻辑
接下来是后端的核心逻辑:接收表单参数,根据条件过滤你提供的学生数据。这里我补充一个$NotesGroupe2的示例数组(方便演示多选场景),同时定义挂科判定规则:学生三门科目平均分低于70分视为挂科。
<?php // 你提供的Group1数据 $NotesGroupe1 = array( "HARG200181" => array("Guillaume", "Harvey", "M", 36, 90, 70, 76), "CHAM010283" => array("Marc-André", "Charpentier", "M", 34, 80, 73, 96), "TREV290991" => array("Valérie", "Tremblay", "F", 26, 70, 71, 69), "PELL180584" => array("Laurence", "Pelletier", "F", 31, 65, 62, 67) // 补充完整数据,模拟挂科 ); // 示例Group2数据 $NotesGroupe2 = array( "ROBE120390" => array("Robert", "Boucher", "M", 28, 85, 78, 82), "LAVO050787" => array("Sophie", "Lavoie", "F", 33, 60, 63, 61), // 挂科 "MART190489" => array("Jean", "Martin", "M", 29, 75, 77, 72) ); // 初始化合并数据数组 $filteredStudents = array(); // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 获取选中的分组 $selectedGroups = isset($_POST['groups']) ? $_POST['groups'] : array(); // 获取是否显示挂科人员的开关 $showFailed = isset($_POST['show-failed']); // 合并选中分组的数据 foreach ($selectedGroups as $group) { if ($group === 'group1' && !empty($NotesGroupe1)) { $filteredStudents = array_merge($filteredStudents, $NotesGroupe1); } if ($group === 'group2' && !empty($NotesGroupe2)) { $filteredStudents = array_merge($filteredStudents, $NotesGroupe2); } } // 如果开启挂科筛选,过滤出挂科学生 if ($showFailed && !empty($filteredStudents)) { $failedStudents = array(); foreach ($filteredStudents as $studentId => $studentData) { // 计算平均分:取数组中第4、5、6位(索引4、5、6)的分数求平均 $scores = array_slice($studentData, 4, 3); $average = array_sum($scores) / count($scores); // 平均分低于70视为挂科 if ($average < 70) { $failedStudents[$studentId] = $studentData; } } $filteredStudents = $failedStudents; } // 展示筛选结果 if (!empty($filteredStudents)) { echo "<h3>筛选结果:</h3>"; echo "<ul>"; foreach ($filteredStudents as $studentId => $data) { list($firstName, $lastName, $gender, $age, $score1, $score2, $score3) = $data; $average = round(($score1 + $score2 + $score3) / 3, 1); echo "<li>ID: {$studentId} | {$firstName} {$lastName} | 平均分: {$average}</li>"; } echo "</ul>"; } else { echo "<p>没有符合条件的学生数据</p>"; } } ?>
三、完整整合说明
把上面的HTML表单和PHP代码放在同一个.php文件中即可运行:
- 用户选择分组和筛选条件,点击提交
- 后端自动合并选中分组的学生数据
- 根据复选框状态过滤挂科人员
- 最终展示符合条件的学生列表
你可以根据实际需求调整挂科判定规则(比如改成单门科目低于60分),或者补充更多分组的数据~
内容的提问来源于stack exchange,提问作者user9554147
相关产品推荐
相关产品推荐

