You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现按单选框筛选文件内容并生成指定信息表格?

问题修复方案

别担心,基础问题踩坑太正常了!我帮你捋捋代码里的几个关键问题,改完就能正常筛选对应等级的学生啦~

你的代码里的核心问题:

  • 赋值运算符误用: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>

修正说明:

  1. 把原来的$l_grades改成更清晰的$selected_grade,避免变量名混淆。
  2. 用array_filter和trim处理文件读取后的数组,去掉空行和换行符,避免出现空的表格行。
  3. 使用switch语句来处理不同等级的判断逻辑,比多个if更清晰。
  4. 遍历的时候逐个获取每个学生的姓名和成绩,判断符合条件后再输出表格行。
  5. 给表格加上border='1',方便查看结构,你可以根据需要调整样式。

内容的提问来源于stack exchange,提问作者Invocation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:32:06