【问题标题】:How to check if PHP rand() has randomly generated all the possible unique numbers by randomly generating numbers如何通过随机生成数字来检查 PHP rand() 是否随机生成了所有可能的唯一数字
【发布时间】:2018-03-12 01:17:58
【问题描述】:

我想确保 PHP rand() 函数在给定范围内随机生成所有可能的唯一数字。

例如,这个函数 rand(0,9) 只能生成 unique 10 次正确的数字。例如:(随机:1,10,4,3,7,9,0,5,8,2,6)-(不重复)。那么我如何确定这个 rand() 函数已经生成了它所有可能的唯一数字呢?

【问题讨论】:

  • 我原以为只生成一个随机数可能会多次生成相同的数字。否则不是随机的。
  • 你不能使用 rand() 函数来做到这一点。但是你可以试试:
  • @MahfuzShishir 如何通过 unique() 函数确定?你能给我举个例子吗?
  • 你应该阅读这个:php.net/manual/en/function.uniqid.php 它不保证你。这取决于您的系统。
  • 如果您想始终生成唯一的数字,那么他们的方法就不同了...但是您为什么要这样做...?我的意思是你到底想做什么......?

标签: php random numbers unique


【解决方案1】:

您必须编写一个算法。一个非常低效的例子是:

$already_generated = array();
while(count($already_generated) < 10) {
    $rand_val = rand(0,9);
    if(!in_array($rand_val)) {
        $already_generated[] = $rand_val;
    }
}

这个算法显然效率很低,但应该可以工作。

【讨论】:

    【解决方案2】:

    如果您只想生成从 0 到 n 的随机数字列表,则此代码应该这样做。

    它从 0 到 $max 的数字列表开始,然后每次选择其中一个数字时,将其添加到输出列表中,然后将其从输入集中删除。然后在剩余数字时重复。

    <?php
    error_reporting ( E_ALL );
    ini_set ( 'display_errors', 1 );
    
    $max = 9;
    $list = range(0, $max);
    
    $output = array();
    while ( count($list) > 0 )  {
        $rnd = rand(0,count($list)-1);
        $output[] = $list[$rnd];
        unset($list[$rnd]);
        $list = array_values($list);
    }
    
    print_r($output);
    

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多