[PHP] scandirを効率的に使う方法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

こんにちわ。
 

とても人当たりが良いと評判ですが、気を許すと周囲のことを見下しがちな下駄です。
 

よくないですね〜。
そんな僕は、どんなに疲れていても、常に見上げる姿勢になれるジャイアント馬場(故)さんの信念を尊敬しています。
 

人のことを信用することを信条にしていて、「裏切るより裏切られるほうがいいじゃないか」という名言が個人的にすごくお気に入りです。
 

そういや、最近作り直しているPHPフレームワークで、ファイル検索をする際に使うscandir機能で、毎回拡張子判定を行ったり、システムファイル(除外対象)を判別する処理がめんどくさいな〜と思っていた時、
 

もしかしたらscandorのオプションをあまり知らずに、やっぱりソート機能しかなかったのですが、他の機能と組み合わせることで、かなり簡易な記述ができることがわかりました・・・orz

scandirの使い方

これまで使っていた書き方は次のような感じで、検索したフォルダのパスを入れていて、その結果をfor分内で処理するだけでした。

 

phpのマニュアルサイトには、オプション機能として、第2引数にsortのON/OFFフラグがあると書いてあっただけなので、とりあえず実行テスト。
 

 

そして、不要なシステムファイルを除外する場合の書き方
 

 

さらに、単一階層だけでなく、複数の階層にも対応している関数は以下のように書けます。
 

 

不要なシステムファイル判定などやらなくてもよくなる、任意の拡張子のみ抽出するスニペット
 

 

pathinfoの情報がピンポイントで便利そうだったので、こんな感じにしてみました。
 

return値のdirnameには、$pathを入れたほうがいいですね。
 

これにさらに、ファイル名の文字列検索機能や、多重階層対応にすると、非常に強力な検索ツールになりそうです。
 

簡単なスニペットを目指したつもりが、まあまあな関数になっちゃいましたね。
見下しすぎました・・・

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です