【发布时间】:2018-10-03 10:38:00
【问题描述】:
我有 10 000 个 ID,它们最初以标准升序方式排序。 我需要以特定方式对这些 ID 进行洗牌,以便以后可以复制生成的序列。
显然,如果我使用 rand() 或 mt_rand(),每次的序列都不一样,所以我需要某种方法,以可预测的结果对项目进行洗牌。
这是我之前尝试过的:
public function pseudoRandomSort(&$ids, $var1)
{
$sorted = array();
foreach ($ids as $id) {
$sorted[md5($id.$var1)] = $id;
}
ksort($sorted);
$ids = array_values($sorted);
}
此方法有效,但我正在寻找更优雅和更快的方法
UPD:感谢@Andrew 提到 $seed 概念。 在此基础上,我制作了一种简单快速的方法,可以按可预测的顺序随机播放项目:
public function predictableShuffle(&$ids, $seed)
{
srand($seed);
shuffle($ids);
}
【问题讨论】:
-
您是从数据库中获取这些 id 的吗?我的意思是他们的 id 来自表格行吗?
-
不,它们存储在一个文件中
-
你已经做了什么?
-
那么,您要排序吗?不想排序?想要随机化?函数名称
pseudoRandomSort充其量是可疑的。 -
@AlexKapustin,我这样做了:
public function pseudoRandomSort(&$ids, $var1) { $sorted = array(); foreach ($ids as $id) { $sorted[md5($id.$var1)] = $id; } ksort($sorted); $ids = array_values($sorted); }在共享主机上随机化 10 000 个 id 大约需要 0.02 秒,我想知道是否有更快的可能更优雅的方式跨度>
标签: php sorting random sequence