我想检查数组中的名称,如果匹配则显示消息。问题是条件将转到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";
}
}
?>
答案 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]) {
并打破第一场比赛的循环,总是,就像已经提到的那样