2017-04-05 41 views
0

我想用php usort在我的网站上显示图像,所以新图像应该在顶部和最底部最老。我试图使用usort,但它不起作用,图像仍然以相反的方式显示,旧图像显示在最前面,新图像显示在最下面。我的代码有问题,或者为什么会发生? (我读了所有在这里的主题在计算器有共同的东西,但是我没有想出什么是错的。)usort由创建日期不工作

我用这个代码:

$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); 
+0

使用mysql命令按日期或编号降序更多信息,那么它会为了你想要的 –

+0

@ShafiqulIslam无法使用mysql命令通过命令的东西,这不是从一个MySQL数据库... – Svish

+0

你是对的,并检查我的答案,希望它能解决你的问题 –

回答

0

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

你正在返回一个布尔值(true/false)。尝试用-交换<。如果你得到的结果与你应该得到的结果相反,请将$a换成$b,它应该以正确的方式排列。

+0

我以前使用'-',我也试图交换'$ a'与'$ b'但我没有发现它的任何工作,所以你建议它应该看起来像这样?:'usort( $ num_files,函数($ a,$ b){return filemtime($ a) - filemtime($ b); }或者像这样:'usort($ num_files,function($ b,$ a){return filemtime($ a) - filemtime($ b);});'? – user7176800

+0

无论在正确的方向排序。 “没有发现任何工作”,以什么方式?什么不起作用?它怎么不起作用?你期待什么,那不会发生? – Svish

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