glob() - 按名称排序

时间:2011-10-10 03:55:33

标签: php sorting foreach reverse glob

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

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

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

4 个答案:

答案 0 :(得分:28)

您可以使用array_reverse

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

答案 1 :(得分:2)

使用usort()执行此操作的方法是......

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

CodePad

答案 2 :(得分:2)

由于glob()函数将文件名排序为默认行为,因此您可以以相反的顺序循环遍历生成的数组,从而避免任何其他处理:

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

答案 3 :(得分:0)

除了@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正在修改传入参数的数组,并且仅返回布尔值。