采取这个函数,这是种子Fisher-Yates shuffle(顺序是随机的,但在相同的种子下可重复):
function seeded_shuffle(array &$items, $seed = false) {
$items = array_values($items);
mt_srand($seed ? $seed : time());
for ($i = count($items) - 1; $i > 0; $i--) {
$j = mt_rand(0, $i);
list($items[$i], $items[$j]) = array($items[$j], $items[$i]);
}
}
Run Code Online (Sandbox Code Playgroud)
这个算法可以逆转吗?即,给定种子值和洗牌数组,数组可以"未洗脑"到其原始顺序吗?如果是这样,怎么样?
(这里的评论提出了这个问题.)