我有一个php代码,它使用文件夹中的每个图像并在我的页面上响应url。
我需要帮助的是使PHP代码随机化每次加载页面的url列表。
我的代码是:
<?php
if ($handle = opendir('images')) {
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..")
{
$thelist .= '<div data-delay="5"><img src="images/'.$file.'"></div>';
}
}
closedir($handle);
}
?>
<?=$thelist?>
多谢
最简单的解决方案是将所有文件名放入一个数组中,然后使用shuffle()
将其混合。然后可以遍历数组并输出图像。它应该看起来像这样:
<?php
$thelist = "";
if ($handle = opendir('images')) {
$images = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
array_push($images, 'images/'.$file);
}
}
closedir($handle);
shuffle($images);
foreach ($images as $image) {
$thelist .= '<div data-delay="5"><img src="'.$image.'"></div>';
}
echo $thelist;
}
?>
通过使用glob()
而不是opendir()
,您可以显着缩短代码,因为glob()
返回一个数组,然后您只需要对该数组进行洗牌。
将文件链接放入数组中,并使用shuffle()函数对其进行洗牌
<?php
if ($handle = opendir('images')) {
$fileTab = array();
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$fileTab[] = $file;
}
}
closedir($handle);
shuffle($fileTab);
foreach($fileTab as $file) {
$thelist .= '<div data-delay="5"><img src="images/'.$file.'"></div>';
}
}
?>
<?=$thelist?>
不直接在while循环中创建div,而是只使用它将所有url存储在Array中。然后打乱该数组,并使用foreach循环来填充$thelist。
为什么不用glob()
呢?
$images = glob('images/*.{jpg,png,gif}', GLOB_BRACE);
shuffle($images);
foreach($images as $image) {
echo '<div data-delay="5">
<img src="', $image ,'">
</div>';
}