PHPでディレクトリ一覧を取得するスマートではない方法
<?php $dirs = array(); if ($dh = opendir($dirName)) { while ($entry = readdir($dh)) { if (is_dir($entry) && $entry != "." && $entry != ".." ) { array_push($dirs, $entry); } } closedir($dh); }
こんなんアホらしくて書いてられん。。。
カレントディレクトリならこれでOK。
<?php $dirs = array_slice(array_filter(scandir('.', 0), is_dir), 2);
さて、$dirNameに対応するか。
<?php $dirs = array_slice(array_filter(scandir($dirName, 0), is_dir), 2);
と、これが全くダメ。is_dirがfalse返してくる。
scandirがエントリ名だけ返してくるらしく、CWDから見たらそんなエントリは無いってことになってしまう。
そしてCWDからの相対パスを返してくれるオプションがねぇ。なんなんだよー。perlのFile::Findぐらい融通効かせてくれ。
とりあえずこんなんで行けるっちゃあ行ける。
<?php $cwd = getcwd(); chdir($dirName); $dirs = array_slice(array_filter(scandir(".", 0), is_dir), 2); chdir($cwd);
けど、chdirしたくなかったので、
<?php $dirs = (array_slice(array_filter(scandir($dirName, 0), create_function('$entry', 'return is_dir("' . $dirName . '/$entry");')), 2); /* $dirName = '...'; $dirs = array_slice(array_filter(scandir($dirName, 0), function($entry){return is_dir("$dirName/$entry");}), 2); って書けないのもどうかと思うよ!! →なんと!function($entry) use ($dirName)って書くっぽい! */
って・・・お寒い感じ。。。もうやだこの言語・・・。