在PHP中对数组进行洗牌

5

I have the following code:

<?php
foreach($bb['slides'] as $b):
$url = "domain.com/" . $b->image . ";
echo($url);
endforeach;
?>

输出结果如下: domain.com/image1.jpg domain.com/image2.jpg domain.com/image3.jpg
我想要随机输出结果的顺序。在foreach语句之前,我尝试使用shuffle($bb)来打乱数组,但没有成功。希望能得到帮助。

1
你的代码加上shuffle后是什么样子的?它应该可以正常工作。也许在一个样本集合中,你只是不幸地被洗牌回到了相同的顺序。你是使用shuffle($bb)还是shuffle($bb['slides'])呢? - Leniency
应该是shuffle($bb['slides'])吗? - rcravens
我的实现比shuffle()更好,使用了mt_rand。https://dev59.com/mm025IYBdhLWcg3w960W#43532529 - Stalingrad
6个回答

10

由于$bb是一个数组的数组,shuffle()不会对子数组随机排序,尝试在嵌套数组上使用shuffle函数,代码如下:

shuffle($bb['slides']);

成功时返回TRUE,失败时返回FALSE。但是如果在洗牌后转储数组,它将被洗牌。 - ruinobreferreira

2
你可能对外部的$bb数组进行了洗牌,而实际上你应该这样做:
shuffle($bb['slides']);
foreach($bb['slides'] as $b):

1

他的foreach循环看起来正确。嗯...除了那个冒号。 :) - New Guy
@新手 - 如果$bb ['slides']是一个数组,那么你是正确的。对我来说,他似乎正在访问单个元素('slides')并尝试对其进行循环。也就是说,我认为$bb是他要尝试循环的数组。 - Chris
实际上,他的冒号也是正确的。没有注意到他正在使用控制结构的替代语法。现在很少见到这种情况了。 - New Guy
@新手 - 你说得对,:语法没有问题,我的foreach循环只是为了强调外部和内部循环。花括号只是出于习惯。 - Chris

1

0

看起来你需要执行shuffle( $bb['slides'] )


0

随机显示内容

<?php
$myContentList = array (
    'One',
    'Two',
    'Three',
    'Four'
);
shuffle ($myContentList);
foreach ($myContentList as $displayAtRandomOrder) {
echo '<div>' . $displayAtRandomOrder . '</div>';
}
?>

随机显示图片

<?php
$myImagesList = array (
    'one.png',
    'two.png',
    'three.jpg',
    'four.gif'
);
shuffle ($myImagesList);
foreach ($myImagesList as $displayImagesAtRandomOrder) {
echo '<img src="images/' . $displayImagesAtRandomOrder . '" width="200" height="40" border="0" />';
}
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接