我試圖建立一個函數,它將檢查針是乾草堆,如果是那麼函數應循環,直到沒有。循環功能,直到沒有指定的針在乾草堆中
到目前爲止,我已經構建了一個隨機數生成函數。那個函數做的是創建一個隨機字符串,然後用sha512對其進行哈希處理。該函數然後從字符串中提取所有數字並將其乘以2.
它使我留下一長串數字,然後我將使用mt_rand指定strpos的開始和結束點。之後,我只是返回隨機創建的數字。
function randomNumber($suurus, $max){
mb_internal_encoding("UTF-8");
$possible="aábcdeéfghiíjklmnoóöópqrstuúüűvwxyzAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚVWXYZ";
$char = mb_substr($possible,rand(0, mb_strlen($possible) - 1),1);
$str = openssl_digest($char, 'sha512');
$str = preg_replace('/[^1-9.]+/', '', $str);
$str = $str*2;
$strLen = strlen($str)-5;
$strStart = mt_rand(1, $strLen);
$strEnd = mt_rand(1, $suurus);
$str = substr($str, $strStart, $strEnd);
while($str > $max){
$str = $str/2;
}
return round($str);
事情是,這個數字不能重複,我需要它在任何時候都是唯一的,我的應用程序。
我實際上完成了我想要的if else語句,但這意味着我必須編寫一個重複if語句的長文字,直到我得到我想要的結果。我真的不認爲這是做事的最聰明的方式。
if(!isset($voitjad)){
$voitjad[$vCounter][] = array(
'nimi' => $voitja,
'auhind' => $keyCode['v'.$vCount.''],
'rn' => $rN,
'siin' => 1,
'id' => $voitjaID
);
}else{
if(!exist($rN, $voitjad)){
$voitjad[$vCounter][] = array(
'nimi' => $voitja,
'auhind' => $keyCode['v'.$vCount.''],
'rn' => $rN,
'siin' => 1,
'id' => $voitjaID
);
}else{
$rN = randomNumber($atLength, $atCount);
$voitja = $attendcheckfb['attending'][$rN]['name'];
$voitjaID = $attendcheckfb['attending'][$rN]['id'];
if(!exist($rN, $voitjad)){
$voitjad[$vCounter][] = array(
'nimi' => $voitja,
'auhind' => $keyCode['v'.$vCount.''],
'rn' => $rN,
'siin' => 2,
'id' => $voitjaID
);
}else{ and so on....
我也試圖與do-while循環,但我不能真正得到它的工作,我不知道究竟我在做什麼錯在這裏。如果你能教育我,請給我提供信息。
$nimed = array_values($nimed);
$voitja = $nimed[$rN]['name'];
$voitjaID = $nimed[$rN]['id'];
$voitjad[$vCounter][] = array(
'nimi' => $voitja,
'auhind' => $keyCode['v'.$vCount.''],
'rn' => $rN,
'siin' => 1,
'id' => $voitjaID
);
$oitjaCount++;
$rN = randomNumber($nimedLength, $nimedCount);
} while(!exist($rN, $voitjad));
如果有,我得到更好的隨機生成的數字的方式,那麼請告訴我,我很開放的建議。同時我需要這個針,乾草堆的幫助。
使用遞歸函數。 – Chris
好吧,我會谷歌它是什麼時候。 – drpzxc
@drpzxc一個調用自身的函數。所以,如果你沒有得到想要的結果,只需重新調用函數即可。 – Daniel