繁体   English   中英

使用php生成2000个6位数的唯一数字

[英]Generate 2000 6 digits unique numbers with php

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

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

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

你可以这样:

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

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

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

如果您想要一个简单的数字索引数组,您可以进行以下转换:

$generated = array_values($generated);

但这不应该是必要的。

尝试下面

$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);

我这样做:

<?
// 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.
}

?>

此代码将比其他示例快得多:

$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()这样的内置命令比函数快得多,它有助于理解哪些函数适用于哪种方法以及对算法性能的健康理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM