如何让php shuffle函数使用种子,这样当我使用相同的种子时,shuffle函数将输出相同的数组。我读到shuffle会自动播种。有没有办法获得使用该shuffle的种子,或者如何使用自定义种子创建/模仿shuffle?
答案 0 :(得分:3)
你无法检索shuffle使用的种子,但你可以模拟shuffle并修复你自己的种子:
jquery.validate.js
这将每天设置一个不同的种子,但是在一整天它将使用相同的种子并以相同的顺序对阵列进行洗牌;明天将是今天不同的随机洗牌
今天(2015年6月6日),序列应为
$array = range(1, 10);
function seededShuffle(array &$array, $seed) {
mt_srand($seed);
$size = count($array);
for ($i = 0; $i < $size; ++$i) {
list($chunk) = array_splice($array, mt_rand(0, $size-1), 1);
array_push($array, $chunk);
}
}
$seed = date('Ymd');
seededShuffle($array, $seed);
var_dump($array);
答案 1 :(得分:0)
PHP没有播种,但你可以改为:
$an_array = array('a','b','c','d');
$indices = array(0,1,2,3);
// shuffle the indices and use them as shuffling seed
shuffle($indices);
// then whenever you want to produce exactly same shuffle use the pre-computed shuffled indices
function shuffle_precomputed($a, $shuffled_indices)
{
$b = $a; // copy array
foreach ($shuffled_indices as $i1=>$i2) $a[$i2] = $b[$i1];
return $a;
}
像这样使用:
$shuffled_array = shuffle_precomputed($an_array, $indices);
您甚至可以使用factoradic number system将$shuffled_indices
数组转换为/可以用作唯一种子的唯一整数,然后根据要使用的事实数字计算shuffle在shuffle_precomputed
函数中。
对于PHP的其他shuffle
版本,您可能希望看到: