0

我正在显示目录列表。我试图让文件按文件名排序,但也按其扩展名排序。

显示之前...
  - 首先按文件名排序
  - 然后在此排序中按扩展名排序

示例:
a_first.jpg
a_first.png
a_first.zip
b_second.doc
b_second.gif
b_second.jpg

<?php 
function getFileExt($filename) {
    return substr(strrchr($filename,'.'),1);
}

$handle=opendir(dirname(__FILE__));

while (($file = readdir($handle))!==false) {
    $fileExt = strtolower(getFileExt($file));
    if(in_array($file, $ignore_file_list)) { continue; }
    if(in_array($fileExt, $ignore_ext_list)) { continue; }
    if(is_dir($file)) { $fileExt = "dir"; }

/*
HERE:

Before display...
  -  sort by filename first
  -  then sort by extension within this sort

Example:
  a_first.jpg
  a_first.png
  a_first.zip
  b_second.doc
  b_second.gif
  b_second.jpg
*/

    echo '
<div><a href='.$file.' class='.$fileExt.'>&nbsp;</a></div>
<div><a href='.$file.'>$file</a></div>
';
}

closedir($handle);
?>

我不确定我是否需要在 WHILE 内使用 FOREACH 进行第二次排序(= 文件的扩展名)或在 WHILE 之外进行 FOREACH(首先将数据放入数组中)或者这是一个多数组排序情况还是……???

仅供参考:为此使用数据库不是一种选择。

任何帮助表示赞赏。

4

2 回答 2

0

您可以将 glob 与 natcasesort 一起使用。

$files = glob($directory."/*.*");
// for just the files names 
$files = array_map("basename", $files);
natcasesort($files);

如果您想将结果限制为具有某些扩展名的项目,您可以将 glob 调用更改为

$files = glob($directory."/*.{jpg,png,zip}", GLOB_BRACE);
于 2013-07-07T04:23:59.223 回答
0
foreach ($example as $value) {
  $file[] = $value;
//regex would be better incase you have files with more than one period
  list($ext, $nam) = explode('.'$value);
  $extention[] = $ext;
  $name[] = $nam;
}

a_sort($extention);
a_sort($name);


foreach($extention as $key=>$value){
  echo $file[$key]."<br/>";
}

foreach($name as $key=>$value){
  echo $file[$key]."<br/>";
}
于 2013-07-07T04:25:57.453 回答