按创建日期不起作用

时间:2017-04-05 20:31:06

标签: php glob usort opendir filemtime

我正在尝试使用php usort在我的网站上显示图像,因此新图像应位于顶部,最旧的图像应位于底部。我尝试使用usort,但它没有工作,图像仍以相反的方式显示,旧的位于顶部,新的位于底部。我的代码有问题,或者为什么会这样? (我在stackoverflow上阅读了所有有共同点的主题,但我没有弄清楚是什么问题。)

我使用此代码:

$folder_path = 'posters/';

$num_files = glob($folder_path . "*.{JPG,jpg,gif,png,bmp}", GLOB_BRACE);
usort( $num_files, function( $a, $b ) { return filemtime($a) < filemtime($b); } );

$folder = opendir($folder_path);

2 个答案:

答案 0 :(得分:0)

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数

你返回一个布尔值(true / false)。尝试使用<交换-。如果您获得的内容与您应该拥有的相反,请将$a$b交换,并且应该以正确的方式进行排序。

答案 1 :(得分:0)

您可以使用获取文件修改时间的filemtime()函数。在这种情况下,您将获得所有图像列表升序,因此您希望将列表显示为上次修改时间,在这种情况下需要使用usort()函数反转所有图像,并使用自定义函数比较修改时间然后列出它。

<?php
function latestImageProcess($compare1, $compare2)
{
    $first_compare = filemtime($compare1);
    $second_compare = filemtime($compare2);

    if ($first_compare == $second_compare) {
        return 0;
    }
    else if ($first_compare < $second_compare) {
        return -1;
    }
    else {
        return 1;
    }
}

$images_list = glob("posters/*.*");
usort($images_list, "latestImageProcess");

for ($i = count($images_list) - 1; $i >= 0; $i--) {
    $image_name = $images_list[$i];
    echo '<img src="' . $image_name . '" height ="400" title="'.$image_name.'"/><br />';
}
?>

希望这会对您有所帮助,并提供有关filemtime的更多信息

http://php.net/manual/en/function.filemtime.php