2012-07-17 18 views
0

我從分配字符串$ randomID的函數中隨機選取一個數字。然後,我建立一個字符串$checkIDas = '|'.$randomID.'|';然後,如果之前使用過隨機數然後忘記它,然後再試一次。問題是我沒有得到錯誤,頁面掛起。我知道我的隨機數函數有效,我的查詢工作。但是,當我添加if strpos語句時,那是掛起的時候。有什麼建議麼?php隨機數在字符串中查找

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."|"; 
    } 
} 
+1

你在哪裏設置'$ randomID'? – 2012-07-17 09:25:32

+0

'$ randomID'未定義。使用'ini_set('display_errors',true)'來顯示錯誤。 – 2012-07-17 09:26:37

回答

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

+0

謝謝。我只在我的第三週的PHP,所以有些事情對我來說並不明顯。我知道我想要一個理想的數組,但不知道如何去做。 – 2012-07-17 10:14:24

1

你是不是在if聲明再生$randomID,所以在本質上,它是一遍又一遍比較相同的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."|"; 
    } 
} 
?> 
+0

對不起,我是。忘了把它放在這裏。 – 2012-07-17 09:35:58

1

while循環依賴於SP,因此該循環繼續下去。

+0

如果在循環能夠前進之前尚未使用該號碼,則不需要。 – 2012-07-17 09:55:43

+0

真的有人投票嗎? – 2012-07-17 19:38:16