web-dev-qa-db-ja.com

PHPを使用してアルファベット順にソートされたディレクトリ内のすべてのファイルを一覧表示するにはどうすればよいですか?

次のPHPコードを使用して、現在のディレクトリの下にあるすべてのファイルとフォルダを一覧表示しています。

<?php
    $dirname = ".";
    $dir = opendir($dirname);

    while(false != ($file = readdir($dir)))
        {
          if(($file != ".") and ($file != "..") and ($file != "index.php"))
             {
              echo("<a href='$file'>$file</a> <br />");
        }
    }
?>

問題は、リストがアルファベット順に並べられていないことです(おそらく、作成日でソートされていますか?わかりません)。

アルファベット順にソートであることを確認するにはどうすればよいですか?

15
David B

manual は、次のように明確に述べています。

readdir
ディレクトリから次のファイルのファイル名を返します。ファイル名は、ファイルシステムによって保存されるの順序で返されます

できることは、ファイルを配列に格納し、並べ替えてから、その内容を次のように出力することです。

$files = array();
$dir = opendir('.'); // open the cwd..also do an err check.
while(false != ($file = readdir($dir))) {
        if(($file != ".") and ($file != "..") and ($file != "index.php")) {
                $files[] = $file; // put in array.
        }   
}

natsort($files); // sort.

// print.
foreach($files as $file) {
        echo("<a href='$file'>$file</a> <br />\n");
}
35
codaddict
<?php
function getFiles(){
    $files=array();
    if($dir=opendir('.')){
        while($file=readdir($dir)){
            if($file!='.' && $file!='..' && $file!=basename(__FILE__)){
                $files[]=$file;
            }   
        }
        closedir($dir);
    }
    natsort($files); //sort
    return $files;
}
?>

<html>
<head>
</head>
<body>

<h1> List of files </h1>

<ul class="dir">
    <? foreach(getFiles() as $file)
        echo "<li name='$file'><a href='$file'>$file</a></li>";
    ?>
</ul>

</body>
</html>
6
Vitim.us

次のように、すべてのディレクトリ名を配列内に配置できます。

$array[] = $file; 

その後、次のコマンドで配列を並べ替えることができます。

sort($array); 

そして、そのコンテンツのリンクを印刷します。

これがお役に立てば幸いです。

2
cored
<?php
$dirname = ".";
$dir = opendir($dirname);

while(false != ($file = readdir($dir)))
{
if(($file != ".") and ($file != "..") and ($file != "index.php"))
{
  $list[] = $file;
}
}

sort($list);

foreach($list as $item) {
echo("<a href='$item'>$item</a> <br />");
}
?>
2
Andrew Sledge

glob および sort を使用すると、機能するはずです。

1
Aif

古いopendir()/ readdir()から離れることをお勧めします。 glob()を使用するか、ディレクトリ内に多数のファイルが見つかった場合は、DirectoryIteratorクラスを使用します。

http://www.php.net/manual/en/class.directoryiterator.php http://www.php.net/manual/en/function.glob.php

よろしく

1
Jan.

この美しいスクリプトを使用できます。

http://halgatewood.com/free-php-list-files-in-a-directory-script/

0
Armesh Singh