登录
首页 >  文章 >  php教程

正确统计用户答题正确数的遍历方法

时间:2026-03-29 08:00:43 327浏览 收藏

本文深入剖析了PHP命令行环境下遍历关联数组时因误用双重循环导致的重复提问问题,手把手教你通过移除冗余for循环、启用动态计分变量、结合trim()和strcasecmp()提升输入容错性,并兼顾readline扩展兼容性与降级方案,最终构建出逻辑清晰、健壮可靠且用户体验友好的地理知识答题测验程序——既解决实际开发痛点,又传递扎实的PHP数组操作与CLI交互最佳实践。

如何正确遍历关联数组并统计用户答题正确数

本文详解 PHP 命令行环境下遍历关联数组的常见误区,修正双重循环导致的重复提问问题,并实现准确的答题计分逻辑。

本文详解 PHP 命令行环境下遍历关联数组的常见误区,修正双重循环导致的重复提问问题,并实现准确的答题计分逻辑。

在 PHP 命令行(CLI)应用中,使用 readline() 交互式提问时,必须确保循环逻辑与数据结构严格匹配。原代码中嵌套了 for 和 foreach 两层循环:外层 for ($i = 0; $i <= count($countries); $i++) 错误地将迭代次数设为 count($countries) + 1(因使用 <=),而内层 foreach 又对全部 10 个国家逐一提问——结果导致每个国家被重复提问 11 次(共 110 道题),完全背离“每国一问”的设计初衷。

正确做法是仅用一次 foreach 遍历,并引入计数器实时统计正确答案数:

<?php
$countries = [
    "Japan" => "Tokyo",
    "Mexico" => "Mexico City",
    "USA" => "Washington D.C.",
    "India" => "New Delhi",
    "Zuid-Korea" => "Seoul",
    "China" => "Peking",
    "Nigeria" => "Abuja",
    "Argentina" => "Buenos Aires",
    "Egypt" => "Cairo",
    "UK" => "London"
];

echo "Weet jij de hoofdsteden van alle landen?" . PHP_EOL;

$correctCount = 0;
foreach ($countries as $country => $capital) {
    echo "Wat is de hoofdstad van " . $country . "?" . PHP_EOL;
    $answer = trim(readline()); // 使用 trim() 去除首尾空格,避免因空格导致误判

    if (strcasecmp($answer, $capital) === 0) { // 不区分大小写的精准比较
        echo "Correct!" . PHP_EOL;
        $correctCount++;
    } else {
        echo "Helaas! De juiste hoofdstad is: " . $capital . "." . PHP_EOL;
    }
}

echo PHP_EOL . "Je hebt " . $correctCount . " van de " . count($countries) . " vragen goed." . PHP_EOL;
?>

关键改进说明:

  • 移除冗余 for 循环:foreach 本身已天然按数组元素个数(10 次)执行,无需额外控制;
  • 启用计分逻辑:声明 $correctCount = 0,每次答对递增,最终输出动态分数;
  • 增强健壮性
    • 使用 trim(readline()) 消除用户输入末尾换行或空格干扰;
    • 采用 strcasecmp() 进行大小写不敏感比较(如用户输入 "tokyo" 或 "TOKYO" 仍判正确);
    • 答错时主动提示正确答案,提升用户体验;
  • ⚠️ 注意事项
    • CLI 环境下 readline() 需确保 PHP 编译时启用了 readline 扩展(Linux/macOS 默认支持,Windows 需手动配置);
    • 若扩展不可用,可降级使用 fgets(STDIN) 替代,但需自行处理换行符:$answer = rtrim(fgets(STDIN), "\n\r");;
    • 数组键名(国家名)含特殊字符(如 Zuid-Korea 中的连字符)不影响遍历,PHP 关联数组对此完全兼容。

通过精简循环结构、引入状态变量与输入规范化处理,即可构建一个简洁、可靠、用户友好的命令行地理知识测验程序。

今天关于《正确统计用户答题正确数的遍历方法》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>