使用php的随机图像集

时间:2015-03-30 14:58:33

标签: php random

我有这个代码,我一直用它来选择一个随机图像。现在我需要选择四个随机图像。

我尝试修改代码并确实有效,但我无法找到防止相同图像出现两次的方法。我对php的了解至多是基本的。

有人可以放任何光吗?

由于

我的代码

<?php
$root = $_SERVER['DOCUMENT_ROOT'];
$path = '/_/images/banners/';

function getImagesFromDir($path) {
    $images = array();
    if ( $img_dir = @opendir($path) ) {
        while ( false !== ($img_file = readdir($img_dir)) ) {

            if ( preg_match("/(\.gif|\.jpg|\.png)$/", $img_file) ) {
                $images[] = $img_file;
            }
        }
        closedir($img_dir);
    }
    return $images;
}

function getRandomFromArray($ar) {
    mt_srand( (double)microtime() * 1000000 );
    $num = array_rand($ar);
    return $ar[$num];
}

$imgList = getImagesFromDir($root . $path);

$imgA = getRandomFromArray($imgList);
$imgB = getRandomFromArray($imgList);
$imgC = getRandomFromArray($imgList);
$imgD = getRandomFromArray($imgList);
?> 

<img src="<?php echo $path . $imgA ?>" alt="<?php echo ucfirst(preg_replace('/\\.[^.\\s]{3,4}$/', '', $imgA)) . ' Logo'; ?>">
<img src="<?php echo $path . $imgB ?>" alt="<?php echo ucfirst(preg_replace('/\\.[^.\\s]{3,4}$/', '', $imgB)) . ' Logo'; ?>">
<img src="<?php echo $path . $imgC ?>" alt="<?php echo ucfirst(preg_replace('/\\.[^.\\s]{3,4}$/', '', $imgC)) . ' Logo'; ?>">
<img src="<?php echo $path . $imgD ?>" alt="<?php echo ucfirst(preg_replace('/\\.[^.\\s]{3,4}$/', '', $imgD)) . ' Logo'; ?>">

2 个答案:

答案 0 :(得分:2)

这应该适合你:

在这里,我只使用glob()从目录中获取所有文件。在此之后,我使用array_filter()过滤数组,并仅获取与数组匹配的文件:["gif", "jpg", "png"]。我通过一个简单的in_array()检查执行此操作,然后使用pathinfo()获取文件的扩展名,并使用strtolower()将其作为小写。

要获得随机图像,我只需shuffle()数组并从数组中取出X图像,然后以array_silce()开头。

最后我只是简单地打印所有图像。

<?php

    $root = $_SERVER['DOCUMENT_ROOT'];
    $path = '/_/images/banners/';
    $random = 4;

    $images = array_filter(glob($root . $path . "*.*"), function($v){
        return in_array(strtolower(pathinfo($v, PATHINFO_EXTENSION)), ["gif", "jpg", "png"]);
    });

    shuffle($images);
    $randomImages = array_slice($images, 0, $random);

    foreach($randomImages as $v)
        echo "<img src='" . $v . "' alt='" . ucfirst(pathinfo($v, PATHINFO_FILENAME)) . " Logo'>";

?>

答案 1 :(得分:1)

使用array_rand()获取所需数量的随机密钥列表,而不仅仅是一个。第二个参数指定应返回多少个键:

<?php

$randomKeys = array_rand($imgList, 4);

foreach($randomKeys as $key) {
    echo '<img src="' . $path . $imgList[$key] . '" alt="' . ucfirst(preg_replace('/\\.[^.\\s]{3,4}$/', '', $imgList[$key])) . ' Logo">';
}