glob() — 按名称排序[重复]

问题描述 投票:0回答:4

如何反转按文件名排序?目前它按字母/数字顺序显示所有文本文件,但我试图让它按降序显示。现在,我已经...

<?php  
foreach (glob("*.txt") as $filename) {
   include($filename);
}
?>

我对 PHP 还很陌生,但我尝试了添加数组的 usort,但这只是导致它只显示 1 个文本文件,所以要么不起作用,要么我只是编码错误。

php sorting foreach reverse glob
4个回答
38
投票

您可以使用

array_reverse

foreach(array_reverse(glob("*.txt")) as $filename) { ...

16
投票

只是对@Foo Bah的答案的补充: 在处理目录中的文件名时,我通常添加

natsort
以防止出现典型的排序情况:

  • 'image1.png'
  • 'image10.png'
  • 'image2.png'

natsort 是一种更加用户友好的排序算法,将保留自然编号:

  • 'image1.png'
  • 'image2.png'
  • 'image10.png'

所以 FooBah 的答案就变成了:

$list = glob("*.jpg");
natsort($list);
foreach(array_reverse($list) as $filename) { ...

请注意,

natsort
正在修改传入参数的数组,并且仅返回一个布尔值。


4
投票

为了获得最佳性能,我建议在处理大型数组避免不必要的数组处理(即排序或反转)。

由于 glob() 函数默认按升序对文件名进行排序,因此您可以简单地以相反的顺序循环遍历结果数组,从而避免任何其他处理:

<?php
for($result = glob("*.txt"), $i = count($result); $i > 0; --$i) {
    include($result[$i-1]);
}


2
投票

usort()
做到这一点的方法是......

usort($files, function($a, $b) {
    return strcmp($b, $a);
});

键盘

© www.soinside.com 2019 - 2024. All rights reserved.