【问题标题】:Randomize output随机化输出
【发布时间】:2011-05-21 19:11:08
【问题描述】:

我有一个输出项目详细信息的页面。数据存储在 db 中,我使用 foreach 在页面上回显它。目前,这些项目按照它们存储在我的表中的顺序显示。每次加载时随机化页面上显示的项目顺序的最佳方法是什么?

【问题讨论】:

    标签: php mysql lamp


    【解决方案1】:

    bool shuffle ( array &$array )

    此函数对数组进行打乱(随机排列元素的顺序)。
    成功返回 TRUE,失败返回 FALSE。

    例子:

    while ($row = mysql_fetch_row($result))
        {
        $set[] = $row;
        }
    
    shuffle($set); // rows now in random order
    
    foreach ($set as $row)
        {
        echo $row['column'];
        }
    

    【讨论】:

    • 这需要将所有数据库结果存储在数组中,对吗?只是问一下,也许您知道结果可以跳过存储在数组中并在需要显示时读取的方式。
    • @Tadeck 您通过查询选择的所有结果,是的。由于您正在显示该组记录,因此它们都是“需要的”。我真的不明白你的问题。
    • 好的,关键是使用例如。 mysql_fetch_row(),每次使用此功能时,您只会得到一行。在您的解决方案的情况下,所有结果都必须被提取到数组中并且它们被打乱。除非我错过了什么。
    • @Tadeck:添加了一个示例;如果之前有任何混淆,那应该清除它。
    • 好吧,我就是这么想的。还是谢谢。
    【解决方案2】:

    在 MySQL 中,您可以执行 ORDER BY RAND() LIMIT n

    但是对于大型表,我可能会变慢,因为它需要在返回前 n 个结果之前对整个表进行排序。

    添加WHERE RAND() < 0.1 将加快查询速度,因为它只需要对大约 10% 的表进行排序。

    【讨论】:

    • +1 这是最好的方法,因为不需要您先全部获取它们,然后在应用程序端随机播放。这样,您仍然可以在需要时单独获取每条记录。
    • ORDER BY RAND() 非常慢。如果您有大量的行,ORDER BY RAND() 不是一个真正的选择。
    • @yes123 您总是可以收藏这个问题。 ;-)
    • 我将问题理解为首先从数据库中选择一组特定的项目,然后以随机顺序显示它们。这会选择一个随机集合的项目。问题是他foreaches 他们,因此他们必须已经在一个数组中。
    • @Core Xii 你是对的。我使用一个类来查询我的数据库,实际上结果都以数组的形式返回。我真的很喜欢这个 mySQL 建议,但在这种特殊情况下,使用 shuffle() 会更容易和更实用
    【解决方案3】:

    我不会立即回显它,而是将数据存储在一个数组中,然后使用array_rand() 随机化数组的内容。使用此函数的第二个参数,您可以指定要随机选择的项目数。

    【讨论】:

      猜你喜欢
      • 2014-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      相关资源
      最近更新 更多