这是一个重现我的问题的函数。我有一个阵列。数组内部是array( 0 => 'l', 1 => 'j', 2 => 'b')
。注意无论我做什么,b
总是在最后。
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]总是&#39; b&#39;:
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" }
答案 0 :(得分:1)
好吧,你 将srand()
一遍又一遍地重置为相同的值,使得原始的输出已知,并且原始输出的输出恰好是原始的,所以它来回地翻转:
var_dump((double)microtime * 100000);
PHP注意:使用未定义的常量microtime - 在第1行的命令行代码中假定为“microtime” 浮动(0)
var_dump((double)microtime(true) * 100000);
浮子(1.3687445399327E + 14
修复它可以修复它,但是,你可以just omit the srand()
:
注意:从PHP 4.2.0开始,不需要使用srand()或mt_srand()为随机数生成器设定种子,因为现在这是自动完成的。
答案 1 :(得分: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
永远是最后一次只是巧合。