在PHP中洗牌并显示目录中的图像
我正试图从一个目录中获取上传的图像,并改变它们的顺序。我能够很容易地获得图像并按顺序显示它们,但似乎无法将它们洗牌在PHP中洗牌并显示目录中的图像,php,html,Php,Html,我正试图从一个目录中获取上传的图像,并改变它们的顺序。我能够很容易地获得图像并按顺序显示它们,但似乎无法将它们洗牌 <?php $imagesDir = 'uploads/'; $images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); $randomImage = $images[array_rand($images)]; ?> <div id="images">
<?php
$imagesDir = 'uploads/';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
$randomImage = $images[array_rand($images)];
?>
<div id="images">
<?php
$print_r($images);
$shuffleimages = shuffle($images);
foreach($shuffleimages as $shuffleimage) {
echo '<img src="'.$shuffleimage.'" />';
}
?>
</div>
我不知道这是否与glob函数有关,或者我是如何更普遍地检索图像的?我已经环顾了其他关于SO的问题,但似乎看不出我的做法有什么不同/错误 你走得太远了。。没有必要重新分配$images。。。您的$shuffleimages将只返回true或false布尔值
您还可以使用和使用sorting_order参数通过对文件进行排序来洗牌。请注意,PHP返回一个布尔值。因此,在您的例子中,$shuffleimages将是true或false,而不是一个无序数组。另外,在洗牌之前或之后,您在哪里打印$images?谢谢抱歉重新打印,不清楚-我在洗牌前打印了,现在编辑问题,明白了。是的,洗牌可能很有效。只是在无序排列之前输出原始数组,然后尝试循环通过布尔值而不是无序排列的数组。扎克让它工作了。谢谢你,真的把它弄清楚了——我不确定它返回了什么,似乎不知道如何找到它返回了什么!实际上,我想在后面的页面中按顺序显示图像,这一部分我没有提到,所以我试图保持$images数组的原样。我已经通过在顶部添加另一个变量修复了这个问题:$shuffleImages=glob$imagesDir.'*。{jpg,jpeg,png,gif}',大括号;在下面,我定义$images,然后洗牌。但我想知道你是否能想出一个更好的方法来完成这部分代码?@JackClarke,我建议:$shuffleImages=$images;洗牌$shuffleImages@showdev–好的,把它放进去,它工作得很好–谢谢!我是否可以出于好奇问一下为什么这更可取?为什么不使用glob两次呢?@JackClarke我认为glob执行起来比复制一个变量需要更长的时间。我在想:一旦我把厨房抽屉里所有的东西都写下来,我就可以复印清单,而不用再看抽屉了。@showdev一个完美的解释!我会记住厨房的抽屉,以备将来使用。如果有一个SCANDIR_SORT_随机值,它会很整洁。事实上,我无法理解你所说的随机排序背后的逻辑。在我们的世界里没有随机排序,也就是说,排序是随机化的一种反面@肖德夫
Array (
[0] => uploads/image1.jpg
[1] => uploads/image2.jpg
[2] => uploads/image3.jpg
[3] => uploads/image4.jpg
[4] => uploads/image5.jpg
)
<?php
shuffle($images); // $images will be shuffled.
foreach($images as $shuffleimage) {
echo '<img src="'.$shuffleimage.'" />';
}
?>