0

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

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

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

4

4 回答 4

3

你可以这样:

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

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

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

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

$generated = array_values($generated);

但这不是必需的。

于 2012-08-27T07:51:14.347 回答
0

尝试关注

$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);
于 2012-08-27T07:54:53.920 回答
0

我会这样做:

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

?>
于 2012-08-27T07:54:57.273 回答
-1

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

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

于 2012-09-02T14:19:50.643 回答