相关疑难解决方法(0)

用于大型数组的php in_array的替代品,用于避免重复条目

我需要从600k到2000k生成一个大的随机数列表,但列表不能有重复.

我目前的'实施'看起来像这样:

<?php
    header('Content-type: text/plain');
    $startTime = microtime(true);
    $used = array();
    for ($i=0; $i < 600000; ) { 
        $random = mt_rand();
        //if (!in_array($random, $used)) {
        $used[] = $random;
        $i++;
        //}
    }
    $endTime = microtime(true);
    $runningTime = $endTime - $startTime;
    echo 'Running Time: ' . $runningTime;
    //print_r($used);
?>
Run Code Online (Sandbox Code Playgroud)

如果我保持in_array测试评论处理时间大约是1秒,那么mt_rand调用和used数组填充相对"便宜"但是当我取消注释in_array测试时,会发生坏事!(我只是等待 - 已经超过10分钟 - 脚本终止......)

所以我在重复检测方面或生成部分寻找替代方案(如何生成随机数而不存在重复的风险)

我对任何建议持开放态度.

php algorithm optimization performance data-structures

3
推荐指数
2
解决办法
6332
查看次数