【问题标题】:Generate 2000 6 digits unique numbers with php用php生成2000个6位唯一数字
【发布时间】:2012-08-27 07:46:44
【问题描述】:

我仍然是 php 的 Rockie,我想生成 2000 个六位数的唯一数字。

<?php
$six_digit_random_number = mt_rand(100000, 999999);
print_r($six_digit_random_number);
?>

我已经编写了上面的简单脚本,它确保数字是 6 位数字。现在我需要 2000 个不重复的数组打印出来,我该怎么做?

【问题讨论】:

  • 您能告诉我们更多关于您要解决的问题吗?
  • 科罗拉多州的“Rockie(s)”粉丝与 PHP 有什么关系? “新秀”可能吗?

标签: php random unique


【解决方案1】:

你可以这样:

$generated = array();
while (count($generated) != 2000) {
  $new = mt_rand(100000, 999999);
  if (!isset($generated[$new])) {
    $generated[$new] = $new;
  }
}

现在$generated 数组包含您的 2000 个唯一随机数。

请注意,我使用数字本身作为索引将数字保存在数组中,以便加快查找速度以确定数字是否已经存在。

如果你想要一个简单的数字索引数组,你可以做这个转换:

$generated = array_values($generated);

但这应该不是必需的。

【讨论】:

    【解决方案2】:

    我会这样做:

    <?
    // Make an empty array
    $numbers = array();
    
    // Loop while there aren't enough numbers
    while (count($numbers) < 2000) {
    
        $random_number = mt_rand(100000, 999999);
    
        if (!in_array($random_number, $numbers)) {
               // This adds the number to the array
            $numbers[] = $random_number;
        }
    
    }
    
    foreach ($numbers as $number) {
        echo $number."\n"; // or <br /> if you are using as part of page.
    }
    
    ?>
    

    【讨论】:

    • Thanx mate 这是我一直在寻找的,但不确定数字是否重复
    • 它们不应该是重复的,因为如果它们不在列表中,我只会将它们添加到列表中!
    【解决方案3】:

    尝试关注

    $randomeArray=array();
    while(count($randomeArray)<2000)
    {
    
    $six_digit_random_number = mt_rand(100000, 999999);
    
    if(!in_array($six_digit_random_number,$randomeArray))
       {
         $randomeArray[]=$six_digit_random_number;
       }
    }
    
    print_r($randomeArray);
    

    【讨论】:

      【解决方案4】:

      这段代码会比其他例子快很多:

      $nums = array();
      while (count($nums) < 2000)  $nums[mt_rand(100000, 999999)] = true;
      

      无需检查号码是否已经存在。然后您可以通过以下方式获取数字:

      foreach ($nums as $randnum => $val)
      {
          // Do something with the random number here.
      }
      

      in_array() 很慢。每次调用它都会遍历整个数组,直到找到匹配项——在这种情况下,匹配的可能性很小,所以这里的例子 in_array() 将是一个 O(n^2) 操作。 isset() 快很多,但在这里不是必需的,count() 只对性能造成轻微影响,因为它只是测量存储在 PHP 内部数据结构中的数组的大小。

      希望这些有用的技巧能在您学习 PHP 时对您有所帮助。像 isset() 这样的内置命令比函数快得多,它有助于了解哪些函数适用于哪种方法以及对算法性能的健康理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 2013-05-04
        • 2015-07-29
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        相关资源
        最近更新 更多