PHP:如何使用array_rand显示多个随机图像


PHP: How to display several, random images with array_rand?

我使用这个脚本来显示一个包含子文件夹的文件夹中的随机图像:

<?php
$imagesDir = glob('folders/pics/*', GLOB_ONLYDIR);
$randomfolder = $imagesDir[array_rand($imagesDir)];
$images = glob($randomfolder . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
$randomImage = $images[array_rand($images)];
echo '<img src="'.$randomImage.'" class="image">'; 
?>

一切都很好!但现在我想同时显示5个图像(对于caroussel滑块)。我使用了以下代码

$randomImage = $images[array_rand($images, 5)];

但它向我显示了这个警告:

警告:非法偏移类型〔…〕

我做错了什么?

您错误地使用了array_rand()函数。它将返回密钥的array,而不是单个数字。你能做的是:

$randomImageKeys = array_rand($images, 5);
for ($randomImageKeys as $key) {
   echo '<img src="'.$images[$key].' class="image">';
}

但是像这样,如果您的$images数组包含较少的E_WARNING,则您将面临E_WARNING的风险超过5个图像-为了避免这种情况,您可以使用以下方法:

$max = (count($images) < 5) ? count($images) : 5;
$randomImageKeys = array_rand($images, $max);
for ($randomImageKeys as $key) {
   echo '<img src="'.$images[$key].' class="image">';
}
$randomImageIndexes = array_rand($images, 5);
foreach ($randomImageIndexes as $imageIndex){
   echo $images[$imageIndex];
}

由于array_rand($array, $n)返回一个数组if $n > 1(参见php.net文档:array_rand),因此必须迭代结果才能使脚本正常工作。

它应该以这种方式运行良好:

<?php
$imagesDir = glob('folders/pics/*', GLOB_ONLYDIR);
$randomfolder = $imagesDir[array_rand($imagesDir)];
$images = glob($randomfolder . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
foreach(array_rand($images) as $imageIndex)
    echo '<img src="'.$images[$imageIndex].'" class="image">';