2011-10-20 53 views
1

我使用PHP array_rand選擇從陣列1條隨機記錄,例如:如何配置PHP的「array_rand」不會給出相同的結果嗎?

$style_class = array("st_style1","st_style2","st_style3","st_style4"); 
$random_class = array_rand($style_class, 1); 
$div_class = $style_class[$random_class]; 

的問題是,有時它提供了相同的記錄幾次,因爲我只用4把它記錄(用「經常發生安靜array_rand「不是必須的)。

例子:

st_style1, st_style2, st_style2, st_style2, st_style4, st_style2 ...

有沒有辦法來解決這個問題,於是兩個相同的記錄不會連續顯示兩次。

例如

st_style2,st_style4,st_style2,st_style1,st_style3,st_style2,st_style1 ...

+0

重複序列是隨機性的一部分。這是不太可能的,但你可以在硬幣拋投中連續10億次領先。看起來不隨機,但是可能的。 –

回答

4

最簡單的解決方案是跟蹤最新的一個,並隨時調用,直到你得到不同的東西。例如:

$style_class = array("st_style1","st_style2","st_style3","st_style4"); 
$styles = array() 
$lastStyle = -1 
for($i = 0; $i < 5; $i++) { 
    while(1==1) { 
     $newStyle = array_rand($style_class, 1); 
     if ($lastStyle != $newStyle) { 
      $lastStyle = $newStyle; 
      break; 
     } 
    } 
    $div_class = $style_class[$lastStyle] 
    $styles[] = $div_class 
} 

然後按順序使用$styles[]數組。它不應該有任何重複

+0

所以在這種情況下,如果我使用你的代碼,我會使用$ lastStyle而不是$ div_class? – Ilja

+0

看我的編輯,看看你會如何使用我的代碼在你的 –

+0

Briliant)))非常感謝你 – Ilja

1

保存在一個VAR的最後一個樣式,然後做一個循環,直到新的風格從去年的風格不同。然後你在每次執行時都會有與上次不同的結果。

2

James J. Regan IV's answer基本上相同,但使用do-while loop

設置這樣的數組:

$style_class = array("st_style1","st_style2","st_style3","st_style4"); 
$prev_class = -1; 

,然後獲得一個隨機類:

do { 
    $random_class = array_rand($style_class, 1); 
} while ($random_class == $prev_class); 
$div_class = $style_class[$prev_class = $random_class]; 

編輯:替代的解決方案,沒有循環:

$style_class = array("st_style1","st_style2","st_style3","st_style4"); 
$random_class = array_rand($style_class); 

要獲得一個新的隨機類:

$random_class += rand(1, count($style_class)-1); 
$div_class = $style_class[$random_class % count($style_class)]; 

這工作只要數組鍵是由零開始的連續整數(如果你是這樣的用array()定義它,並且沒有明確指定任何鍵)。

相關問題