【问题标题】:PHP random number with no repeating numbers [duplicate]没有重复数字的PHP随机数[重复]
【发布时间】:2020-01-05 03:48:19
【问题描述】:

我希望为我正在开发的网站的订单 ID 号生成一个随机数。它使用 MySQL 来存储订单,订单 id 是主键,因此它们无法匹配。订单id被放置在一个输入字段中,该字段将用于插入数据库,所以我不能使用MySQL来生成数字。

我尝试过$numbers = range(1, 20); shuffle($numbers); 但只是在输入字段中获取“数组”。

现在,我只有<?php echo(rand(1,1000)) ?>

【问题讨论】:

  • 要么将主键生成留给您的数据库(自动递增字段),要么使用具有低冲突概率的随机值,如 UUID。
  • 我已经编辑包括我已经尝试过$numbers 但我得到的只是“数组”@RobbyCornelissen 我需要它来生成一个数字,以便它可以通过 URL 转移到另一个页面
  • 另见,stackoverflow.com/questions/47580890/… 显然插入了我的答案;p

标签: php


【解决方案1】:

尝试根据您的框架调用此函数。该功能由 CI 框架完成,用于检查数据库中是否存在随机数。

get_random_number('tbl_order','id');

function get_random_number($table_name,$field_name)
{
    // Create a random id
  $random_unique  =  sprintf('%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

    //$random_unique = random_string('alnum', 6);
    // Make sure the random id isn't already in use
  $CI = get_instance();
  $CI->db->where($field_name, $random_unique);
  $query = $CI->db->get_where($table_name);

  if ($query->num_rows() > 0)
  {
    // If the random id is already in use, get a new number
    $this->get_random_number();
  }
  return $random_unique;
}

【讨论】:

  • 你怎么知道 OP 正在使用 CodeIgniter?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多