【问题标题】:How to make sure that random number will not duplicating? [duplicate]如何确保随机数不会重复? [复制]
【发布时间】:2014-01-13 15:07:50
【问题描述】:

我尝试使用 rand() 使其成为我在数据库中的唯一 ID。但是如何保证这个随机数不会重复呢?

<?php

$num = '';
for ($i = 0; $i < 9; $i++)
   $num .= mt_rand(0, 9);
echo '<input name="counter" value="'.$num.'">';
?>

【问题讨论】:

  • &lt;input name="counter" value="'.$num.'"&gt; 不是有效的 PHP 代码。您应该使用printecho
  • @SharanyaDutta:当然不是。但很清楚 OP 试图做什么,&lt;input&gt; 元素与最初提出的问题几乎没有关系。
  • 然后使用条件语句首先检查它是否在DB中,然后在else如果找到它,重新生成另一个直到它不是重复的。您还可以将另一个选项 UNIX 时间戳与更快的 rand()mt_rand()
  • 请从头开始,准确描述您要使用此号码的目的。这个主题比您想象的要复杂,因此了解您的用例对于向您推荐您应该做什么至关重要。
  • 最好让数据库中的字段自动递增,而不是尝试挑选出尚未使用的随机数。

标签: php random


【解决方案1】:

如果您想在数据库表中插入唯一值(这就是我对您的理解),最好在数据库中创建唯一索引(这可以确保以下列的表中没有重复条目。在如果是 php,请检查您的数组中是否存在重复值。

<?php
  $unique = array();

  while( count($unique) < 9)
  {
    $num = mt_rand(0, 9);

    if( isset($unique[$num]) == false )
       $unique[$num] = true;
  }

  print_r($unique); 
?>

【讨论】:

【解决方案2】:

如果你这样做会更好。

先用range()得到你想要的范围

然后你 shuffle 数组,这样你就可以按随机顺序获取它。

现在如果你只想要 5 个,你可以使用array_slice

$range = range(1, 20);
shuffle($range);
$random = array_slice($range, 0, 5);

print_r($random);

工作示例:example

【讨论】:

  • 这样就永远不会被复制?
  • 它永远不会被复制,你可以测试它,它是不可能被复制的。
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
相关资源
最近更新 更多