【问题标题】:php show all images in directory and sort by last modifiedphp 显示目录中的所有图像并按上次修改排序
【发布时间】:2013-05-16 23:26:51
【问题描述】:

我有以下 php 脚本显示目录中的所有图像

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

我想对此进行修改,以便当您访问该页面时,它会在顶部显示最后修改的图像。有人可以帮助我如何去做吗?

【问题讨论】:

标签: php


【解决方案1】:

您可以使用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 />';
    }

【讨论】:

  • 将 filemtime() 作为回调传递给 uksort() 将无法单独工作。需要一个小的实用函数来解释结果并返回一个整数通知 uksort(),即:“函数 cmp_function [回调] 应该接受两个参数,这些参数将由成对的数组键填充。比较函数必须返回一个小于, 等于或大于零,如果第一个参数被认为分别小于、等于或大于第二个。”
  • @nathan:完全正确,这是我将 PHP 和 Python 对排序函数的“键”的使用弄混了;在 PHP 中,当然是指数组的键。谢谢。
  • 嗨@LucasJones,你的实现完美!无论如何,我可以直接与您联系以进行进一步的跟进吗?
【解决方案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 />';
}

【讨论】:

    猜你喜欢
    • 2022-12-22
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多