PHP随机播种?

时间:2015-06-06 13:02:13

标签: php

如何让php shuffle函数使用种子,这样当我使用相同的种子时,shuffle函数将输出相同的数组。我读到shuffle会自动播种。有没有办法获得使用该shuffle的种子,或者如何使用自定义种子创建/模仿shuffle?

2 个答案:

答案 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版本,您可能希望看到:

  1. PHP - shuffle only part of an array
  2. Efficiently pick n random elements from PHP array (without shuffle)