私はPHPにかなり慣れていないので、PHPの readdir() を使用して、画像でいっぱいのフォルダーを調べ、そのフォルダーにある画像の数に基づいて動的にレンダリングしています。すべてうまく機能しますが、ローカル マシンの HD に表示される順序で画像が表示されないことに気付きました。
PHPを知っている人への私の質問は、PHPを使用してフォルダーの内容を読み取り、実際のファイル名(01.jpg、02.jpgなど)の名前を変更せずに順番に表示する方法はありますか?
関数を見てくださいglob()
。デフォルトでアルファベット順にソートされたファイルを返します。
$files = glob('/some/path/*.*');
おまけに、画像だけをフィルタリングして、ディレクトリを除外できます。
これが、私自身の質問に対する答えとして(投稿した人々の助けを借りて)思いついたものです。
<?php
$dir = "low res";
$returnstr = "";
// The first part puts all the images into an array, which I can then sort using natsort()
$images = array();
if ($handle = opendir($dir)) {
while ( false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".."){
$images[] = $entry;
}
}
closedir($handle);
}
natsort($images);
print_r($images);
$newArray = array_values($images);
// This bit then outputs all the images in the folder along with it's own name
foreach ($newArray as $key => $value) {
// echo "$key - <strong>$value</strong> <br />";
$returnstr .= '<div class="imgWrapper">';
$returnstr .= '<div class="imgFrame"><img src="'. $dir . '/' . $value . '"/></div>';
$returnstr .= '<div class="imgName">' . $value . '</div>';
$returnstr .= '</div>';
}
echo $returnstr;
?>
PHP のソート関数の1 つを適用してみませんか?
$files = readdir( $theFoldersPath );
sort( $files );
readdir
おそらくファイルシステムの順序を取るだけです。NTFS ではアルファベット順ですが、ほとんどの Unix ファイルシステムでは一見ランダムです。ドキュメンテーションには、「エントリは、ファイルシステムに保存された順序で返されます。」とさえ書かれています。
そのため、リストを配列に保存し、並べ替え方法に基づいて並べ替える必要があります。
PHPマニュアルには次のように書かれています。
string readdir ([ resource $dir_handle ] )
Returns the name of the next entry in the directory. The entries are returned in the order in which they are stored by the filesystem.
つまり、同じように表示される必要があります。
詳細については、マニュアルを参照してください。