PHP の基本的な知識を求めて、再帰イテレータを使用しないファイルとディレクトリを読み取る簡単な関数を実行しようとしました。(より多くの演習ですが、実際にはphp<5.3サーバーに必要です)
関数はうまく機能します-しかし、switch
($ output)を追加しようとすると、すべてのファイルがリストされなくなります(たとえば、スイッチを追加する前に、4つのフォルダー(3 +ルート)に61個のファイルが表示されますが、追加されたswitch
47 (root のみ) しか見えない . ここで何か間違ったことをしているのだろうか? なぜこのswitch
ステートメントは偽の「再帰の入れ子」を壊してしまうのだろうか??
function o99_list_my_files_scandir($dir,$output)
{
$result = $result2 = array();
$root = scandir($dir);
foreach($root as $value)
{
if($value === '.' || $value === '..' || $value == 'Thumb.db' || $value == 'Thumbs.db' || $value == '') { continue;}
if(is_file("$dir/$value")) {$result[]="$dir/$value"; continue;} // array files
if(is_dir("$dir/$value")) {$result2[]="$dir/$value"; continue;} // array dirs
foreach(o99_list_my_files_scandir("$dir/$value") as $value)
{
$result[] = $value;
}
}
// this is the troublemaker ...
switch ($output) {
case 'dirs' :
return array_filter($result2); // clean empty results of dirs
break;
case 'files' :
return array_filter($result); // Clean empty array of files
break;
}
}
統合された配列ではなく、ディレクトリとファイルの個別のリストを返す関数を取得する他の簡単な方法はありますか?