0

我正在尝试使用 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);
4

2 回答 2

0

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

您正在返回一个布尔值(真/假)。尝试<-. 如果你得到的是你应该拥有的相反,交换$a$b应该以正确的方式订购它。

于 2017-04-05T20:38:07.410 回答
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

于 2017-04-06T06:45:16.717 回答