可能重复:
使用 PHP 随机输出数组元素
假设我们有这个代码:
<? if (isset($specialoffers)) { ?>
<? foreach ($specialoffers as $value) { ?>
<div>product #</div>
<?};?>
<?};?>
例如这个列表可能每次都不一样,它可能有 1 个产品,它可能有 58 个产品。我只想在列表中以随机顺序显示 10 个产品。
怎么做?
我不想碰 SQL 查询!
可能重复:
使用 PHP 随机输出数组元素
假设我们有这个代码:
<? if (isset($specialoffers)) { ?>
<? foreach ($specialoffers as $value) { ?>
<div>product #</div>
<?};?>
<?};?>
例如这个列表可能每次都不一样,它可能有 1 个产品,它可能有 58 个产品。我只想在列表中以随机顺序显示 10 个产品。
怎么做?
我不想碰 SQL 查询!
查看array_rand函数,它从数组中获取一个或多个随机元素。
因此,您可以执行以下操作:
foreach (array_rand($specialoffers,10) as $key)
do_something_interesting_with $specialoffers[$key];
$specialoffers = array_splice( shuffle($specialoffers), 0, 9 );
这样的事情可能会奏效。
您可以使用shuffle()
随机化数组。
请尝试从关联数组中获取随机值的示例;
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));
您可以使用Reservoir Sampling来做到这一点,如果元素的数量会耗尽您的内存(并通过迭代器呈现),甚至需要它:
$randoms = new RandomIterator($specialoffers, 10);
foreach ($randoms as $value) {
...
}