0

我从分配了字符串 $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."|";
    }
}
4

3 回答 3

1

您没有$randomIDif语句中重新生成 ,因此本质上,它是一遍又一遍地比较相同的 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."|";
    }
}
?>
于 2012-07-17T09:29:49.387 回答
1

您的 while 循环取决于 sp,因此循环将永远持续下去。

于 2012-07-17T09:30:03.713 回答
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

于 2012-07-17T09:38:43.697 回答