我正在尝试使用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);
答案 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的更多信息