私が持っている:PHPはディレクトリのソートを読み取りますか?
$directory='testdirectory/';
$handler = opendir($directory);
while ($file = readdir($handler)) {
...
}
によって並べ替えられ、このようなopendir関数/ readdir関数の出力は何?私は出力からわからないので、日付、アルファベットまたは他のものですか?
私が持っている:PHPはディレクトリのソートを読み取りますか?
$directory='testdirectory/';
$handler = opendir($directory);
while ($file = readdir($handler)) {
...
}
によって並べ替えられ、このようなopendir関数/ readdir関数の出力は何?私は出力からわからないので、日付、アルファベットまたは他のものですか?
http://php.net/readdir:「エントリは、ファイルシステムによって格納された順序で返されます。」
私は見る...しかし、それはどういう意味ですか?私はApacheを持っています... – David19801
あなたのOSによって異なります。 asortなどで並べ替えることができるかどうか確認したい場合。 – powerbuoy
であり、大部分は「作成の順序」です。 –
これまで説明したように、readdir()
がファイルをリストする順序を制御することは困難です。この関数は、ディレクトリへのパスを取得し、連想配列でそれらのリストを作成し、名前、サイズ、またはアクセス/変更/作成された時間に従ってソートします。うまくいけばそれはかなり自明であるはずです。
// Constants to make usage more reader-friendly
define('DIR_SORT_NAME', 1);
define('DIR_SORT_SIZE', 2);
define('DIR_SORT_ATIME', 3);
define('DIR_SORT_MTIME', 4);
define('DIR_SORT_CTIME', 5);
function readdir_sorted_array ($dir, $sortCol = DIR_SORT_NAME, $sortDir = SORT_ASC) {
// Validate arguments
$dir = rtrim(str_replace('\\', '/', $dir), '/');
$sortCol = (int) ($sortCol >= 1 && $sortCol <= 5) ? $sortCol : 1;
$sortDir = ($sortDir == SORT_ASC) ? SORT_ASC : SORT_DESC;
$name = $size = $aTime = $mTime = $cTime = $table = array();
// Open the directory, return FALSE if we can't
if (!is_dir($dir) || (!$dp = opendir($dir))) return FALSE;
// Fetch a list of files in the directory and get stats
for ($i = 0; ($file = readdir($dp)) !== FALSE; $i++) {
if (!in_array($file, array('.','..'))) {
$path = "$dir/$file";
$row = array('name'=>$file,'size'=>filesize($path),'atime'=>fileatime($path),'mtime'=>filemtime($path),'ctime'=>filectime($path));
$name[$i] = $row['name'];
$size[$i] = $row['size'];
$aTime[$i] = $row['atime'];
$mTime[$i] = $row['mtime'];
$cTime[$i] = $row['ctime'];
$table[$i] = $row;
}
}
// Sort the results
switch ($sortCol) {
case DIR_SORT_NAME:
array_multisort($name, $sortDir, $table);
break;
case DIR_SORT_SIZE:
array_multisort($size, $sortDir, $name, SORT_ASC, $table);
break;
case DIR_SORT_ATIME:
array_multisort($aTime, $sortDir, $name, SORT_ASC, $table);
break;
case DIR_SORT_MTIME:
array_multisort($mTime, $sortDir, $name, SORT_ASC, $table);
break;
case DIR_SORT_CTIME:
array_multisort($cTime, $sortDir, $name, SORT_ASC, $table);
break;
}
// Return the result
return $table;
}
ファイルがもうない場合、 'readdir'はブール値falseを返しますが、評価結果がfalseの場合も返すことに注意してください。 'while(false!==($ file = readdir($ handle))){'を使ってすべての名前を読むことができるようにする必要があります。 – Arjan
こんにちは、どのようなことが、真偽値を評価するものを返すのでしょうか? – David19801
@ David19801 falseに評価される場合は、名前が「0」のファイルがある場合。この特定の例では、あいまいな偽を返す他の正当な事例はないと私は考えている。 – DaveRandom