生成固定的随机数组-PHP

时间:2018-07-25 17:09:02

标签: php arrays sorting

我有当前按字母顺序排列的数据,我希望将其随机化,这很简单……但是我不希望每次重新加载代码时都将其随机化。

例如,我有1,2,3,4,5,6,并且代码使数据输出每次例如为2,5,1,3,6,4。实际数据有2500条,如果有区别的话。

编辑:在回答我的问题时,回答是“太宽泛”-太宽泛意味着我的问题有太多可能的答案。到目前为止,只有一个 一个答案 ,而且似乎没有其他答案了。

1 个答案:

答案 0 :(得分:4)

您可以每次使用相同的值显式地为随机数生成器提供种子:

$list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
srand(123456);
shuffle($list);
print_r($list);

这将在每次运行脚本时导致相同的随机播放。

为什么有效:

array_shuffle()使用与rand()相同的随机数生成器。如果您没有使用srand()手动为该随机数生成器添加种子,则PHP会为您使用随机种子为它生成种子。因此,如果仅调用array_shuffle()rand(),则每次都会得到不同的输出。几乎总是这样使用。

现在,如果要 可重现 的随机结果,则可以使用srand()来初始化seeding已知值。只要将随机数生成器植入相同的值,即使在同一脚本的不同运行之间,它也将始终产生相同的结果。电子游戏通常使用这种技术(例如“输入您的游戏编号”)来允许您再次玩同一个随机游戏。

如果您这样想,可能会有所帮助:计算机无法为您提供真正的随机数,它具有数十亿个无限长的预构建的随机数序列。当您致电array_shuffle()时,计算机将为您选择这些系列之一。但是,如果在该调用之前加上srand(123456),则表示:“每当需要一个随机数时,请使用序列号123456。”只要您每次运行脚本都相同,使用的值就没有关系。