0

我有一个网站页面,我用它来存储参考图像..

目前我只是将所有图像放到我服务器上的一个目录中,然后 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

4 回答 4

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, '" />';
        }
    }
}
于 2012-10-01T00:07:54.420 回答
3

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

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

试试看。

于 2012-10-01T00:06:50.327 回答
1

使用 phpshuffle创建的图像数组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!';
 }
}
于 2016-05-07T10:00:02.367 回答
0

请按照以下说明操作:"php"在您网站的根目录中创建一个文件夹并放入以下 ​​php 文件rotate.php...现在创建一个文件夹"pic""xmas"放入您的根目录...您可以通过编辑 var$my_folder_holiday$my_folder_default. ..

<?php
  ##########################################################
  # Simple Script Random Images Rotator • 1.4 • 04.01.2020 #
  # Alessandro Marinuzzi [alecos] • https://www.alecos.it/ #
  ##########################################################
  function rotate($folder) {
    if ((file_exists($_SERVER['DOCUMENT_ROOT'] . "/$folder")) && (is_dir($_SERVER['DOCUMENT_ROOT'] . "/$folder"))) {
      $list = scandir($_SERVER['DOCUMENT_ROOT'] . "/$folder");
      $fileList = array();
      $img = '';
      foreach ($list as $file) {
        if ((file_exists($_SERVER['DOCUMENT_ROOT']  . "/$folder/$file")) && (is_file($_SERVER['DOCUMENT_ROOT']  . "/$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;
    } else {
      mkdir($_SERVER['DOCUMENT_ROOT'] . "/$folder", 0755, true);
    }
  }
  $my_gallery_month = date('m');
  $my_folder_default = 'pic';
  $my_folder_holiday = 'xmas';
  if ($my_gallery_month == 12) {
    $my_gallery = rotate($my_folder_holiday);
  } else {
    $my_gallery = rotate($my_folder_default);
  }
?>

使用非常简单,并且在 PHP 7.4 下运行良好......如果您在网站的根目录中有一个文件夹"pic""xmas"包含您的图像,请放入您的 index.php(或位于根目录的其他文件 php):

<a href="/<?php include("php/rotate.php"); echo $my_gallery; ?>"><img src="/<?php echo $my_gallery; ?>" alt="Random Gallery" width="90" height="67"></a>

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

<a href="/<?php include("php/rotate.php"); echo $my_gallery; ?>" data-fancybox><img src="/<?php echo $my_gallery; ?>" alt="Random Gallery" width="90" height="67"></a>

希望这可以帮助...

于 2018-10-26T09:41:40.503 回答