1

可能重复:
使用 PHP 随机输出数组元素

假设我们有这个代码:

<? if (isset($specialoffers)) { ?>
    <? foreach ($specialoffers as $value) { ?>

      <div>product #</div>

    <?};?>
<?};?>

例如这个列表可能每次都不一样,它可能有 1 个产品,它可能有 58 个产品。我只想在列表中以随机顺序显示 10 个产品。

怎么做?

我不想碰 SQL 查询!

4

5 回答 5

2

查看array_rand函数,它从数组中获取一个或多个随机元素。

因此,您可以执行以下操作:

foreach (array_rand($specialoffers,10) as $key) 
do_something_interesting_with $specialoffers[$key];
于 2013-01-16T14:10:19.420 回答
1
$specialoffers = array_splice( shuffle($specialoffers), 0, 9 ); 

这样的事情可能会奏效。

于 2013-01-16T14:11:48.760 回答
0

您可以使用shuffle()随机化数组。

http://php.net/manual/en/function.shuffle.php

于 2013-01-16T14:11:07.997 回答
0

请尝试从关联数组中获取随机值的示例;

    function array_random_assoc( $arr, $num = 1) {
        $keys = array_keys($arr);
        shuffle($keys);

        $r = array();
        for ($i = 0; $i < $num; $i++) {
            $r[$keys[$i]] = $arr[$keys[$i]];
        }
        return $r;
    }

   $specialoffers = (array_random_assoc($data_array, 10));
于 2013-01-16T14:19:23.083 回答
0

您可以使用Reservoir Sampling来做到这一点,如果元素的数量会耗尽您的内存(并通过迭代器呈现),甚至需要它:

$randoms = new RandomIterator($specialoffers, 10);
foreach ($randoms as $value) {
   ...
}

您可以在Gist 中找到该类的源代码RandomIterator

于 2013-01-16T14:37:33.450 回答