PHP条件内循环不会工作

时间:2017-05-19 17:01:53

标签: php

我想检查数组中的名称,如果匹配则显示消息。问题是条件将转到else语句。

<?php
$names = ['user1','user2','test1','test2'];
$name = "user1";
for($i=0; $i < count($names) ; $i++) {
    if($name == $names[$i]) {
       echo "you are registered";
    }else {
      echo "you are unregistered";
    }
}
?>

4 个答案:

答案 0 :(得分:2)

因此,一旦找到注册用户,就不要遍历所有数组,而是尝试使用此构造

$names = ['user1','user2','test1','test2'];
$name = "user1";
for($i=0; $i < count($names) ; $i++) {
    if($name == $names[$i]) {
        echo "you are registered";
        // found a user, terminate the for loop
        break;
    }
    // if you dont find a registeted user you will do this
    echo "you are unregistered";
}

答案 1 :(得分:0)

为什么不使用PHP的内置in_array而不是重新发明轮子:

if (in_array($name, $names)) {
    echo "you are registered";
} else {
    echo "you are unregistered";
}

答案 2 :(得分:0)

所以你不想打印3&#34;你是未注册的#34;所以循环的功能应该只是弄清用户是否注册了。如果找到名称,可以将布尔值设置为true:

<?php
$names = ['user1','user2','test1','test2'];
$name = "user1";
$registered = false;
for($i=0; $i < count($names) ; $i++) {
    if($name == $names[$i]) {
       registered = true;
    }
}
if(registered){
    echo "you are registered";
} else {
    echo "you are not registered";
}
?>

或者,您可以使用in_array(),它更简洁,更容易理解:

$names = ['user1','user2','test1','test2'];
$name = "user1";
if(in_array($name, $names)){
    echo "you are registered";
} else {
    echo "you are not registered";
}

答案 3 :(得分:0)

注意:安全相关性?使用===来比较值

f($name == $names[$i]) { ...

f($name === $names[$i]) {

并打破第一场比赛的循环,总是,就像已经提到的那样