PHP条件语句未遍历答案数组仅读取首个元素问题求助
解决你的PHP问答数组遍历与打印问题
嘿,我来帮你搞定这两个问题!先拆解一下你的核心需求和问题点:
1. 解决if语句仅读取第一个数组元素的问题
你定义的是一个二维数组$questionsAndAnwsers(顺便提一句,建议把拼写改成$questionsAndAnswers,避免后续拼写坑),如果你的if语句只拿到第一个元素的答案,大概率是因为你直接硬访问了数组的第一个索引(比如$questionsAndAnwsers[0]['answer']),没有遍历整个数组或者定位到当前显示的问题对应的元素。
两种常见场景的解决方式:
场景1:逐个遍历所有问题(CLI/批量处理)
用foreach循环遍历数组里的每一组问答,这样就能逐个处理每个问题的答案判断:
// 修正数组拼写并补充完整示例 $questionsAndAnswers = array( array( "question" => "What early cartoon character created by the Disney Studio was Mickey Mouse based off of?", "answer" => "Oswald the Lucky Rabbit" ), array( "question" => "What was Disney's first full-length animated feature film?", "answer" => "Snow White and the Seven Dwarfs" ) ); // 遍历每一组问答 foreach ($questionsAndAnswers as $qa) { // 显示当前问题 echo "问题:" . $qa['question'] . "\n"; // 获取用户输入(CLI环境示例) $userInput = trim(fgets(STDIN)); // 这里的if会对应当前问题的答案,而非只看第一个元素 if (strcasecmp($userInput, $qa['answer']) === 0) { // 执行你的打印逻辑 echo "你的答案:" . $userInput . "\n"; echo "正确答案:" . $qa['answer'] . "\n"; echo "回答正确!\n\n"; } else { echo "回答错误哦,再试试?\n\n"; } }
场景2:Web环境下显示单个问题(按索引定位)
如果是网页里每次只显示一个问题,你可以通过URL参数或会话记录当前问题的索引,直接定位到对应的数组元素:
$questionsAndAnswers = array( array( "question" => "What early cartoon character created by the Disney Studio was Mickey Mouse based off of?", "answer" => "Oswald the Lucky Rabbit" ) ); // 获取当前问题的索引(比如从URL的index参数获取) $currentIndex = isset($_GET['index']) ? intval($_GET['index']) : 0; $currentQa = $questionsAndAnswers[$currentIndex]; // 显示问题 echo "<h3>" . $currentQa['question'] . "</h3>"; // 处理表单提交的答案 if ($_SERVER['REQUEST_METHOD'] === 'POST') { $userAnswer = trim($_POST['user_answer']); // 忽略大小写判断,提升用户体验 if (strcasecmp($userAnswer, $currentQa['answer']) === 0) { // 打印目标内容 echo "<p>你的答案:" . $userAnswer . "</p>"; echo "<p>正确答案:" . $currentQa['answer'] . "</p>"; echo "<p style='color:green'>回答正确!</p>"; } else { echo "<p style='color:red'>回答错误,请再试一次!</p>"; } } // 提交答案的表单 echo '<form method="post">'; echo '<input type="text" name="user_answer" placeholder="输入你的答案" required>'; echo '<button type="submit">提交</button>'; echo '</form>';
2. 完善正确答案的打印逻辑
其实上面的代码已经包含了你要的打印逻辑:当用户输入和正确答案匹配时,直接把用户输入的内容和数组里存储的原始答案输出即可。这里用strcasecmp而非直接==,是为了忽略大小写差异(比如用户输入"oswald the lucky rabbit"也能判断正确),更贴合实际使用场景。
如果你的代码里已经有循环但还是只取第一个元素,那要检查是不是把if语句放在了循环外面——要是判断逻辑在循环外,自然只会处理第一个元素,务必把判断逻辑放在循环内部,对应每个问题的答案。
内容的提问来源于stack exchange,提问作者user9453652
相关产品推荐
相关产品推荐

