2016-12-12 4 views
-1

ファイルシステムのファイルをhtml形式で同じ表示に表示しようとしています。特定のフォルダのファイルを同じ順番で表示

私はこのようなファイル名を持って、それがフォルダ構造で次のようになります。

ABC_100_name.pdf 
ABC_101_name.pdf 
ABC_102_name.pdf 
ABC_102A1_name.pdf 
ABC_103_name.pdf 
ABC_103A1_name.pdf 
ABC_104_name.pdf 

私は任意の並べ替えパラメータなしscandir()を使用しています。私が手 結果は次のとおりです。

ABC_100_name.pdf 
ABC_101_name.pdf 
ABC_102A1_name.pdf 
ABC_102_name.pdf 
ABC_103A1_name.pdf 
ABC_103_name.pdf 
ABC_104_name.pdf 

sort()も他のsort-functionsどちらもこれで私を助けているようです。 何が間違っていますか?


私はscandir()から取得配列は以下のとおりです。

array(5) { 
[0]=> string(1) "." 
[1]=> string(2) ".." 
[2]=> string(16) "ABC_100_name.pdf" 
[3]=> string(18) "ABC_101A1_name.pdf" 
[4]=> string(16) "ABC_101_name.pdf" } 
+0

配列の並べ替えの結果はどのようなものですか?この場合、PHPはAをアンダースコアよりも先に置いていて、LSはアンダースコアの後にAを入れていますが、それがあなたの質問で何を試したのかについての詳細がなくても分かりません。 –

+0

うん、そういうことだよ。 私が使用したすべてのソート関数はアンダースコアの前にAを入れています。 – zool

答えて

0

あなたが離れscandir()から移動し、readdir()を使用して喜んでいる場合は、サンプル#2を使用することができるかもしれない:

if ($handle = opendir('.')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "$entry<br>"; 
     } 
    } 
    closedir($handle); 
} 

ここでの区別はそれぞれの説明の中で与えられることに注意してください。

scandir():ディレクトリからファイルとディレクトリの配列を返します。

readdir():ディレクトリ内の次のエントリの名前を返します。 エントリは、ファイルシステムによって格納された順序で返されます。

+0

乾杯、私が得たかった答えではありませんでしたが、もう少し研究した後、唯一有益な可能性があるようです。 – zool

+0

@zool - ええ、私は非常に理解しています。私は 'glob()'を公正なビットで使います。ソート*(AFAIK)*によるループも処理しません。常にこのメソッドを使用する必要があります。完全なファイルパスを含めることの欠如はPITAのようなものです。とにかく、upvoteに感謝します。それはうまくいってうれしい。 – Abela

0

これは必要なものですか?

$customSort = function($s1, $s2) { 
    $length = min(strlen($s1), strlen($s2)); 
    for ($i = 0; $i < $length; ++$i) { 
     if ($s1[$i] === $s2[$i]) continue; 
     if ($s1[$i] === '_') return -1; 
     return strcmp($s1[$i], $s2[$i]); 
    } 
    return 0; 
}; 

usort($filenames, $customSort); 
+0

あなたの答えをありがとう、私は少し調整し、私はここからこれに似た何かを使用しています:[リンク](http://stackoverflow.com/questions/21416765/php-sort-filenames-with-an-アンダースコア) 私の具体的なケースの場合 ほとんどの時間をつかむよりずっと簡単です:D – zool

関連する問題