0

这是一个重现我的问题的功能。我有一个数组。数组内部是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] 始终为 '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" } 
4

2 回答 2

1

好吧,您确实一遍又一遍地重置srand()为相同的值,使原始的输出已知,而原始输出的输出恰好是原始的,因此它忠实地来回翻转:

var_dump((double)microtime * 100000);


PHP 通知:使用未定义的常量 microtime - 在第 1 行float(0)的命令行代码中假定为“microtime”

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

浮动(1.3687445399327E+14

修复它会修复它,但是,您可以省略srand()

注意:从 PHP 4.2.0 开始,无需使用 srand() 或 mt_srand() 为随机数生成器播种,因为现在这是自动完成的。

于 2013-05-16T22:49:20.790 回答
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总是最后的。

于 2013-05-16T22:54:23.483 回答