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);
?>

FOREACH を使用して WHILE 内で 2 番目の並べ替え (= ファイルの拡張子) を実行する必要があるのか​​、WHILE の外側で FOREACH を実行する必要があるのか​​ (最初にデータを配列に入れるため)、それとも複数の配列のソート状況か... ???

参考までに: これにデータベースを使用することはオプションではありません。

どんな助けでも大歓迎です。

4

2 に答える 2

0

natcasesort とともに glob を使用できます。

$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 に答える