我有一个SELECT查询,最多可以返回1000个名字 - 更有可能返回300-400个名字。
我想将输入字符串与SELECT查询返回的数组中的名称进行比较。
我有两个问题:
我已经尝试过返回,然后退出,但两者都不能完全按我喜欢的方式工作。
以下是我为测试这个想法而运行的代码: 第一个php文件包含名称数组
<?php
$names=array("R","A","V");
$arrlengths=count($names);
?>
并包含在第二个文件中。
<?php
include 'test-2nd-include.php';
//the above file contains an array with three names
//it also contains the length of the array in the arrlengths variable
//in the test case we are using a name assigned to a variable in this file
//however, when used on the registration page, it will be a value that has come through $_POST
$rr = "A";
//a test variable that is initially = 0 but will be incremented if value is found in array
$ohno = 0;
for($xx=0;$xx<$arrlengths;$xx++)
{
echo "$ names [ $xx ] ", $names[$xx];
echo "<br>";
if ($names[$xx] ==$rr) {
// if the value is found then the test variable is set t
$ohno = 1;
}
}
if ($ohno > 0){
echo " $rr already exists in our members list" ;
}
else {
echo "Congratulations! $rr is still available!" ;
}
?>
我所看到的是,如果我在$ohno = 1;
之后使用return或exit,则不会处理最后的消息。如果我将if ($ohno > 0){......$rr is still available!" ;}
移动到for循环中,结果真的很奇怪!
我确信我错过了一些东西但是在整整一个下午盯着它之后,我仍然无法找到一种方法让代码在遇到第一个匹配后停止运行并显示相应的消息 - 当它找到匹配时当它没有。
这就是第一个问题的原因!从长远来看,我花在尝试这样做的时间是否值得节省服务器时间/处理?毕竟,最多1000个预期用户,此代码可能会在一个月左右的时间内运行大约300-400次?!
答案 0 :(得分:3)
要提前结束循环,请使用break;
语句。
但是,由于您显然正在尝试检查SQL表中是否已存在名称,因此您可能应该直接向数据库询问相关信息:
select true from YourUserTable where name = 'theName' limit 1
然后检查是否返回1或0行。如果返回一行,则名称已存在;如果结果集为空,则名称仍然可用。这比首先从数据库获取整个用户名列表然后手动检查它要快得多。
如果你还想迭代:
$found = false;
// Of course, a for loop is also possible
foreach ($namesArray as $position => $name) {
if ($name == $nameYouAreLookingFor) {
$found = true;
break;
}
}
if ($found)
echo "The name already exists";
else
echo "The name is still available";
答案 1 :(得分:-1)
什么是错的
if ($names[$xx] ==$rr) {
echo " $rr already exists in our members list" ;
$ohno = 1;break;
然后将循环放在if if ($ohno == 0){
echo "Congratulations! $rr is still available!" ;
}
时间的长短实际上取决于几个因素,我觉得这不是一个直截了当的答案。