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

順序が毎回異なることを保証するには、ページのロード間で表示された順序に関するデータを保持する必要があります。ただし、これは必ずしも必要なものではありません。毎回単純に順序をランダム化すると、ディレクトリ内の画像の数が多いほど、同じ順序が 2 回得られる可能性が低くなります。

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 に答える
0

次の手順に従ってください: "php"Web サイトのルートにフォルダーを作成し、次の 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 で非常にうまく機能します... Web サイトのルートに画像"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 に答える