web-dev-qa-db-ja.com

glob()—名前で並べ替え

ファイル名で並べ替えを逆にするにはどうすればよいですか?現在、すべてのテキストファイルをアルファベット/番号順に表示していますが、代わりに降順で表示しようとしています。今、私は...

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

私はPHPにかなり慣れていませんが、配列を追加してusortを試しましたが、テキストファイルが1つしか表示されなかったため、機能しないか、コーディングが間違っていました。

14
FrozenTime

array_reverseを使用できます:

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

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

CodePad

2
alex

@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はパラメータで渡された配列を変更しており、ブール値のみを返すことに注意してください。

1
Gabriel Glenn