【问题标题】:PHP - Exit For Loop After Wrong AnswerPHP - 错误答案后退出循环
【发布时间】:2013-07-08 01:16:50
【问题描述】:

我正在尝试自学 PHP。我当前的练习结合了一个要求用户输入城市名称的表单(未包含在代码中,但它有效)。循环和 if 语句将条目与州首府数组进行比较,以返回说明该城市是否为州首府的答案。

如果我省略了elseif 部分,代码运行正常,但是当用户输入一个不在数组中的城市时,我别无选择。但是对于elseif,循环的第一部分不会执行。例如,如果我输入没有elseif 的“Albany”,我会得到“Albany is the capital of New York”。但如果我使用 elseif 语句输入它,它会运行循环,直到找到“纽约”并打印“奥尔巴尼是纽约的首都”。

我已经用谷歌搜索过这个,并且我已经阅读了我所拥有的关于 PHP 的书籍。而且我也知道我犯了一个非常基本的错误。任何指导将不胜感激。

for ($i = 0 ; $i < count($stateCapitalNames); $i++)

if ($enteredCity == $stateCapitalNames[$i]) {

print "<p>$enteredCity is the capital of <b>$stateNames[$i]</b>. </p>";


} elseif ($enteredCity != $stateCapitalNames[$i]){

print "<p>$enteredCity is not the capital of a state.</p>";

}

?>

【问题讨论】:

  • 在旁注中,您不需要else if,您可以使用else,因为此时$enteredCity != $stateCapitalNames[$i] 始终为真。

标签: php loops


【解决方案1】:

您可以使用break 离开for 循环。

您应该查看array_search 以找到您要查找的索引。如果首都不存在,array_search 返回false

例如

$i = array_search($enteredCity, $stateCapitalNames);
if($i !== false)
{
    echo "<p>$enteredCity is the capital of <b>",$stateNames[$i],"</b>. </p>";
}

【讨论】:

  • 不知道 array_search 存在。我喜欢这个 +1 的漂亮工具。
  • 这是我将采用的方法,但是如果您尝试学习如何遍历数组并在找到所需内容时退出,那么您想要的就是休息。
【解决方案2】:

您的 for 循环中缺少括号。我很惊讶 elseif 是罪魁祸首,而且代码无论如何都不会失败。但这是我会做的,除了错误:

$correct = false;

for ($i = 0 ; $i < count($stateCapitalNames); $i++){
    if ($enteredCity == $stateCapitalNames[$i]) {
         $correct = true;
         $stateNames = $stateNames[$i]; // Updated $stateNames variable

         break;
    }
}

//You can check $correct here...
if($correct){
    print "<p>$enteredCity is the capital of <b>$stateNames[$i]</b>. </p>"; /*Removed [$i] from  $stateNames. For some reason, $stateNames[$i] wasn't updating outside the loop, but now it is. 
}

这样,无论如何,在代码找到正确答案之前,用户都是错误的。一旦找到正确答案,它就会将其设置为正确并通过将 $i 设置为数组的长度来退出循环。

【讨论】:

  • 虽然省略括号是不好的做法(接近于犯罪),但它应该仍然有效,因为整个 if-else 被视为一个语句。
  • 我试过了,但现在循环没有通过 states 数组。
  • @apartridge 今天在 SO 上有 太多不好的做法”:全局、引用、单例、echoheredoc / nowdoc、 goto 等...而且,是的,我们中有多少人使用其中的一两个或全部?当它不在弯曲的手中时,它是点头“坏”。
  • 我不明白你想说什么。但是不好的做法是不好的,它们往往会导致不必要的问题。单行语句可以避免使用括号,但对于多行语句,您一定会遇到麻烦。
  • @apartridge 我没有测试代码;这是一个起点。我一眼看不到任何错误,但如果您有修复,请随时更新。您会注意到,我没有定义 OP 脚本所隐含的变量(statecapitalnames 等)。
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
相关资源
最近更新 更多