如何实现按单选框筛选文件内容并生成指定信息表格?
问题修复方案
别担心,基础问题踩坑太正常了!我帮你捋捋代码里的几个关键问题,改完就能正常筛选对应等级的学生啦~
你的代码里的核心问题:
- 赋值运算符误用:
if ($l_grades="A" and $grades >= '90')里的=是赋值操作,不是比较,得改成==;而且$grades是整个成绩数组,不能直接和90对比,要逐个判断每个学生的成绩。 - 数组处理冗余:
file()函数本身就会把文件按行分割成数组返回,你不需要再用explode(PHP_EOL, $names),这会破坏原有的数组结构。 - 遍历逻辑错误:判断条件不该放在循环外面,而且你直接输出整个数组
$names和$grades,应该同时遍历姓名和成绩数组,逐个处理每个学生的数据。
修正后的完整代码:
<section id="leftcol"> <h1> Select Grade to List:</h1> <form action="hwk9.php" method="post"> <input type="radio" name="l_grade" value="A"> A <br /> <input type="radio" name="l_grade" value="B"> B <br /> <input type="radio" name="l_grade" value="C"> C <br /> <input type="radio" name="l_grade" value="D"> D <br /> <input type="radio" name="l_grade" value="F"> F <br /> <input type="submit" name="submit" value="Submit"> </form> </section> <section id="rightcol"> <?php $submit = $_POST['submit']; if (isset($submit)) { $selected_grade = $_POST['l_grade']; $names = file("student.names.txt"); $grades = file("student.grades.txt"); // 移除数组末尾可能存在的空行(如果文件最后一行是空的) $names = array_filter($names, 'trim'); $grades = array_filter($grades, 'trim'); print "<table border='1'> <tr><th> Name </th> <th> Grade </th></tr>"; // 同时遍历姓名和成绩数组,确保索引对应 foreach ($names as $index => $name) { // 去除姓名里的换行符 $name = trim($name); // 把成绩转成数字,方便比较 $student_grade = (int)trim($grades[$index]); // 根据选中的等级判断是否符合条件 $show = false; switch($selected_grade) { case 'A': $show = $student_grade >= 90; break; case 'B': $show = $student_grade >= 80 && $student_grade < 90; break; case 'C': $show = $student_grade >= 70 && $student_grade < 80; break; case 'D': $show = $student_grade >= 60 && $student_grade < 70; break; case 'F': $show = $student_grade < 60; break; } if ($show) { print "<tr> <td> $name </td> <td> $student_grade </td> </tr>"; } } print "</table>"; } ?> </section>
修正说明:
- 把原来的
$l_grades改成更清晰的$selected_grade,避免变量名混淆。 - 用
array_filter和trim处理文件读取后的数组,去掉空行和换行符,避免出现空的表格行。 - 使用
switch语句来处理不同等级的判断逻辑,比多个if更清晰。 - 遍历的时候逐个获取每个学生的姓名和成绩,判断符合条件后再输出表格行。
- 给表格加上
border='1',方便查看结构,你可以根据需要调整样式。
内容的提问来源于stack exchange,提问作者Invocation
相关产品推荐
相关产品推荐

