glob()に GLOB_BRACE + GLOB_NOSORT フラグをつけて、優先順位をつけてファイルパスを取得
すごい。こんなこともできるのねー。
<? $basedir = "/path/to/temp/"; $filename= "hogehoge"; $extension = array( ".saisyo", ".tugi", ".sonotugi", ".saigo" ); $pattern = $basedir.$filename; if ( is_array( $extension ) ) { $pattern .= "{".implode( ",", $extension )."}"; } else { $pattern .= $extension; } $array_path = glob( $pattern, GLOB_BRACE + GLOB_NOSORT ); print_r( $array_path ); ?>
GLOB_BRACEとGLOB_NOSORTはglob関数の引数のflagsで両方指定している。
patternパターン。チルダの展開やパラメータ置換は行いません。
flags有効なフラグは次のとおりです。
* GLOB_MARK - 各ディレクトリにスラッシュを追加します
* GLOB_NOSORT - ディレクトリに存在するファイルを返します (ソートはされません)
* GLOB_NOCHECK - 検索パターンにマッチするファイルが見つからない場合に、 検索パターン自身を返します
* GLOB_NOESCAPE - バックスラッシュによるメタ文字のクォートを行いません
* GLOB_BRACE - {a,b,c} を展開し「a」、「b」あるいは「c」のいずれかにマッチさせます
* GLOB_ONLYDIR - パターンにマッチするディレクトリのみを返します
* GLOB_ERR - (ディレクトリが読めないなどの) 読み込みエラー時に停止します。デフォルトではエラーは無視されます。
/path/to/temp/にこのようにファイルがあったときにもGLOB_BRACEで指定した順番で、配列が作れる。
$ ls -l /path/to/temp/ hogehoge.saigo hogehoge.saisyo hogehoge.tugi
0 => /path/to/temp/hogehoge.saisyo 1 => /path/to/temp/hogehoge.tugi 2 => /path/to/temp/hogehoge.saigo