2013-05-16 53 views
0

這是一個重現我的問題的功能。我有一個數組。陣列內部是array(0 => 'l', 1 => 'j', 2 => 'b')。請注意,無論我做什麼,b總是如此。問題爲什麼我無法在PHP中使用shuffle正確地洗牌數組?

private function fixed_shuffle($data_a, $data_b, $data_c) { 
    $return_value[] = $data_a; 
    $return_value[] = $data_b; 
    $return_value[] = $data_c; 

    for ($i=0; $i <= 10; $i++) { 

     srand((double)microtime * 1000000); 

     shuffle($return_value); 

     var_dump($return_value); 

     echo "<br />"; 

     echo implode(",",$return_value); 

     echo "<br />"; 
    } 
} 

示範,注意[2]始終是 'B':

Current set separated by commas is 'j,l,b'. 
Current answer is 'b'. 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l,j,b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j,l,b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l,j,b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j,l,b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l,j,b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j,l,b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l,j,b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j,l,b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l,j,b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j,l,b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 

回答

1

嗯,你遍地重置srand()相同的值,使得的輸出原來知道了,原來輸出的輸出恰好是原來的,所以它可以來回翻轉:

var_dump((double)microtime * 100000); 

PHP說明:未定義恆定microtime中的使用 - 假定 'microtime中' 在命令行代碼在第1行
浮子(0)

var_dump((double)microtime(true) * 100000); 

浮子(1.3687445399327E + 14

解決可能會解決這個問題,但是,您可以just omit the srand()

注意:從PHP 4.2.0開始,不需要使用srand()或mt_srand()隨機生成隨機數生成器,因爲它現在自動完成。

0

其實,我想你的代碼,它似乎對除microtime事情我部分的工作。下面是我的結果:

j, l, b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "b" [2]=> string(1) "l" } 
j, b, l 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l, j, b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "b" [2]=> string(1) "j" } 
l, b, j 
array(3) { [0]=> string(1) "l" [1]=> string(1) "b" [2]=> string(1) "j" } 
l, b, j 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l, j, b 
array(3) { [0]=> string(1) "b" [1]=> string(1) "l" [2]=> string(1) "j" } 
b, l, j 
array(3) { [0]=> string(1) "b" [1]=> string(1) "j" [2]=> string(1) "l" } 
b, j, l 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j, l, b 
array(3) { [0]=> string(1) "l" [1]=> string(1) "j" [2]=> string(1) "b" } 
l, j, b 
array(3) { [0]=> string(1) "j" [1]=> string(1) "l" [2]=> string(1) "b" } 
j, l, b 

我只是覺得,這只是一個巧合,b總是持續。

相關問題