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

ステートメントで を再生成していない$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."|";
    }
}
?>
于 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 に答える