加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:20:24 所属栏目:PHP教程 来源:网络整理
导读:我需要从600k到2000k生成一个大的随机数列表,但是 列表不能有重复. 我目前的’实施’看起来像这样: ?php header('Content-type: text/plain'); $startTime = microtime(true); $used = array(); for ($i=0; $i 600000; ) { $random = mt_rand(); //if (!in_
我需要从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);
?>

如果我保持in_array测试注释,处理时间约为1秒,那么
mt_rand调用和使用的数组填充相对“便宜”但是当我取消注释时
in_array测试坏事发生了! (我只是等待 – 已经超过10分钟 – 脚本终止……)

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

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

解决方法

对于快速/脏的解决方案,使用/检查数组键是否可以提高速度?

$used = array();
for ($i = 0; $i < 600000; ) { 
    $random = mt_rand();
    if (!isset($used[$random])) {
        $used[$random] = $random;
        $i++;
    }
}
$used = array_values($used);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读