2013-07-27 46 views
0

我試圖生成異常獨特的隨機排列, 我走到這一步:PHP獨特的隨機數字陣列例外

function rand_except($min, $max,$no_numbers, $except) { 
    //loop until you get a unique randomized array without except number 

    $end=false; 
    while (!$end){ 
    $numbers = rand_array($min, $max,$no_numbers);//get unique randomized array 
    if(!in_array($except,$numbers)){ 
     $end=true; 
     break; 
    } 

    } 
return $numbers; 
} 

,但現在我想要的功能循環,直到除了參數ISN」 t時的陣列

+0

將函數添加到* rand \ _array *函數而不是一遍又一遍地調用它直到它產生所需的輸出爲止效率更高嗎? –

回答

0

我懷疑這會更容易通過更新rand_array功能(或寫它的修改版本)來生成無$除了值來啓動與陣列來解決這個問題英寸

如果這不是一個選項,這裏是一個可能的解決方案,不涉及一遍遍呼叫rand_array功能:

$numbers = rand_array($min, $max-1, $no_numbers); 
for ($i = 0; $i < count($numbers); $i++) { 
    if ($numbers[$i] >= $except) { 
    $numbers[$i] += 1; 
    } 
} 

您撥打rand_array功能,但指定一個都不能少比您想要在陣列中的實際最大數量。然後,你遍歷結果,並且大於或等於$除了值的任何值,由1

這個增量是假設$除了值的範圍是從$最大$ max。如果沒有,您可以直接返回rand_array($min, $max, $no_numbers);