我从一个分配了字符串$ randomID的函数中随机选择一个数字。然后我构建一个字符串$checkIDas = '|'.$randomID.'|';
然后,如果之前使用过随机数,那么请忘记它并再试一次。问题是我没有得到错误,页面只是挂起。我知道我的随机数函数有效,我的查询有效。但是当我添加if strpos语句时,就会挂起它。有什么建议吗?
function randomNumber($min, $max) {
$rand = base_convert( md5( microtime() ), 16, 10);
$rand = substr($rand, 10, 6);
$diff = $max - $min + 1;
return ($rand % $diff) + $min;
}
$sp = 1;
$usedUsers = "|0|";
while($sp < 7) {
$randomID = randomNumber(1,55);
$checkIDas = "|".$randomID."|";
if (strpos($usedUsers,$checkIDas) !== false) {
//Run my Query
$sp ++;
$usedUsers = $usedUsers . $randomID."|";
}
}
答案 0 :(得分:1)
你没有在$randomID
语句中重新生成if
,所以从本质上讲,它反复比较相同的id,导致无限循环。
试试这个:
<?php
$sp = 1;
$usedUsers = "|0|";
while($sp < 7) {
// generate randomID again
$randomID = randomGeneratorFunction();
$checkIDas = "|".$randomID."|";
if (strpos($usedUsers,$checkIDas) !== false) {
//Run my Query
$sp ++;
$usedUsers = $usedUsers . $randomID."|";
}
}
?>
答案 1 :(得分:1)
你的while循环取决于sp,所以循环继续。
答案 2 :(得分:1)
其他人已经指出了这些问题,我想补充一点,你可以通过使用适当的语言结构让你的生活变得更轻松,比如将使用过的id放在数组中并查看它们:
...
$usedUsers = Array(); // this will hold the id list
...
...
$sp = 1;
while($sp < 7) {
// get $randomID from somewhere
if( ! in_array($randomID, $usedUsers) ) {
// Run my Query
$sp++; // increment counter
$usedUsers[] = $randomID; // add new id to array
}
}
...
(伪代码,根据您的要求进行修改。)
此致
RBO