恵比寿のWebサイト制作・Webデザインチームのブログ。Webデザインやコーディング、SEO対策まで幅広く手掛けています。

恵比寿のデザイン制作チームのブログです。

Webデザイン、
Web制作、
SEO対策の
ご依頼・ご相談

Contact

【PHP】指定したディレクトリ下のファイル名を全て取得し、任意の順序にした配列で受け取る。

投稿日:

今回は、PHPについて書いていきます。

指定したディレクトリ下のファイルを全て取り出すにはglob関数が非常に便利です。
 

glob('/dir/*');

 

上記のように書くだけでdir以下のフォルダーやファイルを配列で取得してくれます。*が使えるのは非常に便利ですね。

また、glob関数はファイルが存在しなかった場合は空の配列を返してきます。

フォルダー等は除いてファイルのみを取得したい場合は、
 

array_filter(glob('取り出したいファイルへのパス'),'is_file');

 
としてあげると、ファイルのみを取得することができます。

今回は以下のディレクトリがあった場合、imagesフォルダの中身をすべて取得してみます。


 
glob関数はこのようになります。

$images = glob('test/images/*')

 
結果

array(5) { [0]=> string(19) "test/images/aaa.jpg"
 [1]=> string(25) "test/images/test_01.jpg"
 [2]=> string(25) "test/images/test_02.jpg"
 [3]=> string(25) "test/images/test_03.png"
 [4]=> string(19) "test/dir/images/bbb.jpg" }

 
無事にimagesフォルダ以下の画像ファイルがすべて配列に格納されてかえってきました。

また、欲しいファイルの種類があれば*を使って上手く指定してあげるとそれだけが取得できます。

ここではjpg画像ファイルのみを取得します。
 

$images = glob('/test/images/*jpg')

 
結果

array(4) { [0]=> string(19) "test/images/aaa.jpg"
 [1]=> string(25) "test/images/test_01.jpg"
 [2]=> string(25) "test/images/test_02.jpg"
 [3]=> string(19) "test/images/bbb.jpg" }

 
これでjpgファイルのみが取得できました。

次に配列の中身の任意の順序に変更するためのコードを書いていきます。

単純に逆順にしたい等であればglob関数をarray_reverse()関数で囲うことで十分ですが、

今回は任意の順序でaaa.jpg、bbb.jpgを先頭にもっていくようにします。
 

$order = array('aaa','bbb','_01','_02','_03');
foreach($order as $search){
    foreach($images as $image){
        $name = substr($image,-7,-4);
        if($search === $name){
            $sort[] = $image;
        }
    }
}

 
変数$sortに$orderで指定した順序の配列が格納されました。

あとはこの$sortをお馴染みのforeachやwhile等のループ処理を使って出力するだけです。

ループの中でliタグを使って、任意の順序で画像やリンク先を出力したいときなどに使えると思います。

この記事をシェアする

  • Twitter
  • Facebook
  • BookmarkB!
  • Pocket

Related Entries

この記事を書いた人

TOM

TOM

Webデザイナー、UI/UXデザインと共にJavascript、PHP等のプログラミング言語について日々勉強中。