前回解説した正規表現とPCRE関数を使って、ディレクトリ内の特定の拡張子のファイルのリストを作成してみます。今回のサンプルプログラムではさらに、特定の拡張子のファイルリストを得た後それをhtmlのselect要素に整形することで、ユーザにファイルを選ばせて処理を加えるWEBアプリケーションのインターフェース部分という体裁で書いてみようと思います。
<?php $dir = "sample"; echo '<form name="" method="" action=""><select name="">'; foreach(preg_grep("/\.jpg$/",scandir($dir)) as $val){ echo '<option value="'.htmlentities($val,ENT_QUOTES,"UTF-8").'">' .htmlentities($val,ENT_QUOTES,"UTF-8").'</option>'; } echo '</select></form>'; ?> |
ディレクトリを検索してその中の拡張子が.jpgのファイルだけ抽出し、セレクトメニューの項目名にしています。ここで使っている関数は、引数2に配列を与えると引数1に与えた正規表現文字列にマッチする要素だけを配列に格納し、返り値として返すpreg_grepという関数です。
preg_grep(引数1,引数2,引数3); 引数1 : 正規表現文字列(前後にスラッシュで囲む) 引数2 : 抽出元の配列 引数3 : 反転フラグ。PREG_GREP_INVERTを与えると、条件にマッチしない要素の配列を返す。省略可。 |
例では引数2にscandir関数を与えて、ディレクトリ内の全てのファイル/ディレクトリ名を配列にしています。その中からの拡張子.jpgの抽出を、preg_grep関数が担当するようになっています。
この例ではあまり問題になりませんが、preg_grep関数には気をつけなければならない点が一点あります。返り値として返す配列の添字が、引数に与えた元の配列のものを継承するということです。つまり配列の添字が必ずしも連番になっていないので、添字をカウントアップさせて要素をひとつずつ取り出すループとは上手く連携できません。そうした処理と連携する場合は、array_values関数を使って配列の要素に連番の添字をアサインし直しましょう。
ピンバック: PHPのもう一つのパターンマッチング関数glob | AkisiのWEB制作日記
ピンバック: PHPでシンプルな文字列検索をする | AkisiのWEB制作日記