正确使用else为foreach循环中的if条件(PHP)

时间:2018-02-28 12:05:16

标签: php

最近,我试图在foreach循环中使用if条件..并且它已经完成没有问题..

但是,当我在循环中使用else时,if条件变得完全被忽略,而else条件将被执行而不检查if条件..

这是循环:

foreach ($ids as $id) {

    if (substr($id, 0, 8) === $first8) {
        $matched = true;
        header("Location: success.php");
        break; 
    } else {
        echo "<script language=\"JavaScript\">\n";
        echo "alert('Entered ID is incorrect');\n";
        echo "window.location='index.html?loginFailed=true&reason=wrongID'";
        echo "</script>";
        exit;
    }

 }

现在,当用户输入他的ID时,其他条件将在没有条件的情况下执行..天气ID是否正确。注意到当我删除其他时,如果ID正确,代码工作正常。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的代码仅检查数组的第一个元素。使用此代码:

if(in_array($first8, array_map(function($id){
    return substr($id, 0, 8);
}, $ids))) {
    header("Location: success.php"); 
} else {
    echo "<script language=\"JavaScript\">\n";
    echo "alert('Entered ID is incorrect');\n";
    echo "window.location='index.html?loginFailed=true&reason=wrongID'";
    echo "</script>";
    exit;    
}

答案 1 :(得分:0)

把你的&#34;没有比赛&#34;循环后处理,exit;如果找到匹配 - 而不是break

foreach ($ids as $id) {
    if (strpos($id,$first8)===0) {
        header("Location: success.php");
        exit;
    }
}
echo "<script language=\"JavaScript\">\n";
    echo "alert('Entered ID is incorrect');\n";
    echo "window.location='index.html?loginFailed=true&reason=wrongID'";
echo "</script>";
exit;