2

次のphpスクリプトで、ディレクトリ内のすべての画像を表示します

<?php
$images = glob($dirname."*.jpg");
foreach($images as $image) {
echo '<img src="'.$image.'" height ="400"/><br />';
}
?>

これを変更して、ページにアクセスすると、最後に変更された画像が一番上に表示されるようにします。誰かが私がそれを行う方法を教えてもらえますか?

4

2 に答える 2

2

関数を使用してfilemtime()、各ファイルの変更日を見つけることができます。uksort()これは、ループで処理される前に配列をソートするためのキーとして使用できます。

これにより、配列はファイル変更時間の昇順、つまり mtime が最も古いものから順に配置されます。その後、配列を反転するか、逆方向に反復処理できます。

<?php
    function mtimecmp($a, $b) {
        $mt_a = filemtime($a);
        $mt_b = filemtime($b);

        if ($mt_a == $mt_b)
            return 0;
        else if ($mt_a < $mt_b)
            return -1;
        else
            return 1;
    }

    $images = glob($dirname."*.jpg");
    usort($images, "mtimecmp");
    $images=array_reverse($images);

    foreach ($images as $image) {
        echo '<img src="'.$image.'" height ="400"/><br />';
    }
?>

(後方に反復する方が効率的です...)

    // ...
    usort($images, "mtimecmp");

    for ($i = count($images) - 1; $i >= 0; $i--) {
        $image = $images[$i];
        echo '<img src="'.$image.'" height ="400"/><br />';
    }
于 2013-05-16T23:32:53.653 に答える
0

次の 2 つの手順で実行する必要があります: (a) ディレクトリの内容を読み取り、最終変更情報をメモします (b) 結果をレンダリングします

$images = glob($dirname . '*.jpg');
$mostrecent = 0;
$mostrecentimg = null;

// scan
foreach ($images as $image) {
  $imagemod = filemtime($image);
  if ($mostrecent < $imagemod) {
    $mostrecentimg = $image;
    $mostrecent = $imagemod;
  }
}

// display
echo '<img src="' . $mostrecentimg . '" height="400"/><br />';
foreach($images as $image) {

  // the most recent was already output above so skip remainder this iteration
  if ($image == $mostrecentimg) continue;

  echo '<img src="' . $image . '" height="400"/><br />';
}
于 2013-05-16T23:35:07.863 に答える