20

次の 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 />");
        }
    }
?>

問題は、リストがアルファベット順に並べられていないことです (おそらく、作成日で並べ替えられているのでしょうか?よくわかりません)。

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

4

7 に答える 7

42

マニュアルには、次のように明確に記載されています。

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");
}
于 2010-10-20T11:59:46.363 に答える
6
<?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>
于 2013-02-28T06:26:04.830 に答える
2

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

$array[] = $file; 

その後、次の方法で配列をソートできます。

sort($array); 

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

これが助けになることを願っています。

于 2010-10-20T12:01:36.547 に答える
2
<?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 />");
}
?>
于 2010-10-20T12:03:00.283 に答える
1

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

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

よろしく

于 2010-10-20T12:07:14.953 に答える
1

globsortを使用するとうまくいくはずです。

于 2010-10-20T12:00:08.093 に答える