来自目录的PHP图像 - 随机顺序

时间:2012-09-30 23:57:37

标签: php image random directory

我有一个用于存储参考图像的网站页面..

目前我只是将所有图像放到我服务器上的目录中,然后php会显示我喜欢的内容。

我想问的是,每次刷新页面时,如何让它们以不同的随机顺序显示?

代码如下:

$dir = 'images';
$file_display = array ('jpg', 'jpeg', 'png', 'gif');


if (file_exists($dir) ==false) {
echo 'Directory \'', $dir, '\' not found';
} else {
$dir_contents = scandir($dir);


foreach ($dir_contents as $file) {
    $file_type = strtolower(end(explode('.', $file)));

    if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) {
    echo '<img class="photo" src="', $dir, '/', $file, '" alt="', $file, '" />';
    }
}
}

4 个答案:

答案 0 :(得分:8)

为了保证订单不同,每次都要求您携带有关页面加载之间显示顺序的数据。 然而,这不一定是您所需要的 - 如果您每次只是随机化订单,那么目录中的图像数量越多,您获得相同订单两次的机会就越低。

您只需使用shuffle()随机化数组的顺序:

$dir = 'images';
$file_display = array ('jpg', 'jpeg', 'png', 'gif');

if (file_exists($dir) == false) {
    echo 'Directory \'', $dir, '\' not found';
} else {
    $dir_contents = scandir($dir);
    shuffle($dir_contents);

    foreach ($dir_contents as $file) {
        $file_type = strtolower(end(explode('.', $file)));

        if ($file !== '.' && $file !== '..' && in_array($file_type, $file_display) == true) {
            echo '<img class="photo" src="', $dir, '/', $file, '" alt="', $file, '" />';
        }
    }
}

答案 1 :(得分:3)

看看shuffle功能。 http://php.net/manual/en/function.shuffle.php由于PHP是无状态的,因此您每次都要重新扫描目录,或者将$ dir_contents分配给会话变量。然后你可以简单地改变会话变量。

 if ($file !== '.' && $file !== '..' && in_array($file_type, suffle($file_display)) == true) {

试试。

答案 2 :(得分:1)

将php shuffle用于由scandir

创建的图像数组
 $dir = 'images';
 $file_display = array ('jpg', 'jpeg', 'png', 'gif');     
 if (file_exists($dir) == false) {
    echo 'Directory \'', $dir, '\' not found';
 } else {
    $dir_contents = scandir($dir);                    
    if(shuffle($dir_contents)) {                    
      foreach ($dir_contents as $file) {
         $info = new SplFileInfo($file);

      // scandir returns an array of files and,or directories 
      // so we should check if $file is a file 
      // and that it's extension matches the allowed ones 
      // which are ('jpg', 'jpeg', 'png', 'gif')

         if(is_file($file) && in_array($info->getExtension(),$file_display)) {
            echo '<img class="photo" src="', $dir, '/', $file, '" alt="', $file, '" />';                                  
          }          
      }        
    } else {
    echo 'Error applying random order!';
 }
}

答案 3 :(得分:0)

请按照以下说明操作:在您网站的根目录中创建一个文件夹“ php”,并将以下php文件放入“ rotate.php” ...

<?php
  ###############################################
  # Simple Php Image Rotator - 1.1 - 24.10.2018 #
  # Alessandro Marinuzzi - http://www.alecos.it #
  ###############################################
  function rotate($folder) {
    $list = scandir($folder);
    $fileList = array();
    $img = '';
    foreach ($list as $file) {
      if (is_file($folder . '/' . $file)) {
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if ($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png') {
          $fileList[] = $file;
        }
      }
    }
    if (count($fileList) > 0) {
      $imageNumber = time() % count($fileList);
      $img = $folder . '/' . $fileList[$imageNumber];
    }
    return $img;
  }
?>

用法非常简单,并且在PHP 7.2下非常有效...如果您在网站的根目录中有一个包含图片的“ pic”文件夹,请放入index.php(或其他位于php中的文件)中在根目录中):

<a href="/<?php include("php/rotate.php"); echo rotate("pic"); ?>">

这是使用highslide库的另一种用法:

<a href="/<?php include("php/rotate.php"); echo rotate("pic"); ?>" class="highslide" onclick="return hs.expand(this)"><img src="/<?php echo rotate("pic"); ?>" title="Click To Enlarge" alt="Random Gallery" width="90" height="67"></a>

希望这对您有帮助...