首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从PHP的列表中选择10个随机的东西?

如何从PHP的列表中选择10个随机的东西?
EN

Stack Overflow用户
提问于 2009-08-07 12:14:58
回答 5查看 9.2K关注 0票数 12

我知道如何从数组中选择一个随机项目,但是从一个数组中(比如说,20个)随机选择10个项目怎么样?(用PHP.)

使它更加复杂的是,每个项目实际上有两个部分:一个文件名和一个描述。基本上,它是为一个网页,将显示10个随机图像,每次你重新加载。这些数据的实际格式并不重要,尽管它非常简单,我更愿意用纯文本甚至硬代码来包含它,而不是建立一个数据库。(这也不意味着要经常改变。)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-07 12:16:22

可以使用array_rand()函数从数组中选择一个或多个随机项。

票数 15
EN

Stack Overflow用户

发布于 2009-08-07 12:27:55

可以对数组进行shuffle,然后使用array_slice选择前十个元素。

代码语言:javascript
复制
shuffle($array);
$tenRandomElements = array_slice($array, 0, 10);
票数 25
EN

Stack Overflow用户

发布于 2022-07-13 23:34:18

如果您不想shuffle()整个数组(可能是因为您的数组相对较大),您可以调用array_rand()来填充键数组,然后使用该键数组过滤输入数组。

代码:(演示)

代码语言:javascript
复制
$input = [
    ['filename' => 'a.php', 'description' => 'foo'],
    ['filename' => 'b.php', 'description' => 'fooey'],
    ['filename' => 'c.php', 'description' => 'bar'],
    ['filename' => 'd.php', 'description' => 'berry'],
    ['filename' => 'e.php', 'description' => 'buoy'],
    ['filename' => 'f.php', 'description' => 'barf'],
    ['filename' => 'g.php', 'description' => 'food'],
    ['filename' => 'h.php', 'description' => 'foodie'],
    ['filename' => 'i.php', 'description' => 'boof'],
    ['filename' => 'j.php', 'description' => 'boogey'],
    ['filename' => 'k.php', 'description' => 'fudge'],
    ['filename' => 'l.php', 'description' => 'fudgey'],
    ['filename' => 'm.php', 'description' => 'barge'],
    ['filename' => 'n.php', 'description' => 'buggy'],
    ['filename' => 'o.php', 'description' => 'booger'],
    ['filename' => 'p.php', 'description' => 'foobar'],
    ['filename' => 'q.php', 'description' => 'fubar'],
    ['filename' => 'r.php', 'description' => 'goof'],
    ['filename' => 's.php', 'description' => 'goofey'],
    ['filename' => 't.php', 'description' => 'boofey'],
];
var_export(
    array_intersect_key(
        $input,
        array_flip(
            array_rand($input, 10)
        )
    )
);

您会注意到,输出中只有10行随机选择的数据。

shuffle()不同,因为$input是在array_intersect_key()中首先被提名的,所以“随机”项目实际上是按照它们原来的顺序排列的。

即使使用经典循环迭代array_rand()的返回数组,结果仍将根据它们在原始数组中的位置进行排序。

代码:(演示)

代码语言:javascript
复制
$randoms = [];
foreach (array_rand($input, 10) as $key) {
    $randoms[] = $input[$key];
}
var_export($randoms);

如果随机元素的位置很重要,则应该对随机选择的结果调用shuffle()

请注意,PHP手册为array_rand()提供了以下内容

  • array_rand()使用不适合加密目的的伪随机数生成器。
  • 当只选择一个条目时,array_rand()返回随机条目的键。否则,将返回随机项的键数组。这样做可以从数组和随机值中选择随机键。
  • 如果返回多个键,它们将按照原始数组中存在的顺序返回。
  • 尝试选择比数组中的元素更多的元素将导致E_WARNING级别的错误,并返回NULL。

如果您不确定将选择多少个随机项或数组中有多少项,请使用min($yourNumberOfRandomItemsToReturn, count($yourArray))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1244399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档