【问题标题】:usort by creation date not working按创建日期排序不起作用
【发布时间】:2017-04-05 20:31:05
【问题描述】:

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

【问题讨论】:

  • 使用 mysql 按日期或 id desc 排序,然后它会按您的意愿排序
  • @ShafiqulIslam 不能使用 mysql order by 来订购不是来自 mysql 数据库的东西...
  • 你是对的,检查我的答案,希望它能解决你的问题

标签: php glob usort opendir filemtime


【解决方案1】:

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

您正在返回一个布尔值 (true/false)。尝试将&lt; 替换为-。如果你得到的与你应该得到的相反,将$a$b 交换,它应该以正确的方式排序。

【讨论】:

  • 我之前使用过-,我还尝试将$a$b 交换,但我没有发现任何工作,所以你建议它应该看起来像这样?: usort( $num_files, function( $a, $b ) { return filemtime($a) - filemtime($b); } ); 或像这样:usort( $num_files, function( $b, $a ) { return filemtime($a) - filemtime($b); } ); ?
  • 以正确的方向排序。 “没有发现任何工作”,以什么方式?什么不工作?它怎么不工作?你在期待什么,这不会发生?
【解决方案2】:

您可以使用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-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多