【问题标题】:Using Random_int instead of Rand()使用 Random_int 而不是 Rand()
【发布时间】:2020-06-29 09:42:06
【问题描述】:

我目前正在使用 Rand() 使用简单的 Rand() 和 where SQL 查询从表中选择随机结果。

现有代码:

private function doPreEventStart($user) {
  $row = db_fetch_item("SELECT resultid FROM ResultPackage
      where ResultPackage.slotid like '{$this->curSlotId}'
      and ResultPackage.PackageID like '%{$user->packageid}%'
      ORDER BY RAND() LIMIT 1");
  $this->curResultId = $row['resultid'];

我想将其更改为使用 Random_int,因为这提供了应用程序所需的更真实的随机性。

我试过了,但还是不行:

  private function doPreEventStart($user) {
      $row = db_fetch_item("SELECT resultid FROM ResultPackage
        where ResultPackage.slotid like ‘%{$slot_id}'
        and ResultPackage.PackageID like '%{$user->packageid}%'
        ORDER BY resultid asc LIMIT 1");
        $this->MinResult = $row['resultid'];
    var_dump(random_int($this->MinResult,$this->MaxResult) + ", SLOTID=" + $slot_id);
    }

请有人帮忙更正上面的代码。

【问题讨论】:

  • 我对你想要达到的目标有点困惑。在代码中,您从数据库中选择 1 行,然后在 1 行 resultid 列和...之间生成一个随机数……什么?您何时以及在 $this->MaxResult 中声明什么?
  • 是什么不工作?你有错误信息吗?

标签: php random


【解决方案1】:

看起来您正在尝试使用 db_fetch_item 函数获取单个项目,然后对该项目执行一些随机性,这将是它无法正常工作的根源。

根据包的不同,您应该有一个函数,该函数将从您的查询中返回匹配行的数组 - 我希望有一个 db_fetch_array。

一旦你有一个项目数组,使用 array_rand 选择单个项目是最简单的,它给你一个随机元素的键(但不是元素本身,所以你必须使用该随机键从数组中查找)。

试试这个:

  private function doPreEventStart($user) {
      $data = db_fetch_array("SELECT resultid FROM ResultPackage
        where ResultPackage.slotid like ‘%{$slot_id}'
        and ResultPackage.PackageID like '%{$user->packageid}%'
        ORDER BY resultid asc LIMIT 1");

        // Select random element from the array
        $slot_id = $data[array_rand($data)];

        var_dump("SLOTID=" + $slot_id);
    }

【讨论】:

  • 谢谢,但我们已被明确指示使用 Random_int
  • 由于返回的数据数组将从索引0到count-1,你可以这样做:$slot_id = $data[random_int(0, count($data)];
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多