1

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

如果我省略了该elseif部分,代码运行正常,但是当用户输入一个不在数组中的城市时,我别无选择。但是使用elseif,循环的第一部分不会执行。例如,如果我输入不带 的“Albany” elseif,我会得到“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>";

}

?>
4

2 回答 2

7

您可以使用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>";
}
于 2013-07-08T01:22:31.213 回答
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 设置为数组的长度来退出循环。

于 2013-07-08T01:24:03.077 回答