我使用这个脚本来显示一个包含子文件夹的文件夹中的随机图像:
<?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">';