質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3885閲覧

PHPで、再帰的にサブディレクトリのファイルを配列に保存するにはどうすればいいですか

qwe001

総合スコア133

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/03 13:53

編集2016/08/04 07:31

かなり急ぎです。
次のようなコードがあります。

ディレクトリ構成としては
test

1

01.jpg
02.jpg
aa.jpg

のような構成となっています。
ファイルは必ず1つのサブディレクトリの中にあり、01.jpg,02.jpgのような連番のファイルのみを配列に格納するという実装を予定しています。
サブディレクトリは1つ以上存在することはありません。サブディレクトリが存在しないということもありません。

やりたいことは、対象ディレクトリ($temp_dir)をスキャンして、もし画像だった場合は$imagesに格納、もしディレクトリだった場合はそのディレクトリ内に移動して、再度scandirを実行、といったことがしたいです。

以下のコードの// ??の部分に再帰処理を書きたいのですが、コードが思いつきません。。何かよい方法はありますでしょうか。

当方Laravel5.2を使用しておりますので、コンポーネントで同じようなことが実装できるのであればそれでもOKです。よろしくお願いいたします。

$temp_dir = '/test'; $entries = scandir($temp_dir); foreach($entries as $entry){ if($entry === '.' || $entry === '..'){ continue; } if (is_file("$temp_dir/$entry")){ if (preg_match('/^[0-9]+\.jpg$/', strtolower($entry))) { $images[] = $entry; } } if(is_dir("$temp_dir/$entry")){ if (preg_match('/^[0-9]+\.jpg$/', strtolower($entry))) { // ?? } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/08/03 23:07

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。
qwe001

2016/08/04 07:32

失礼いたしました。ベストアンサーを選び忘れておりました。ご指摘ありがとうございます。こちらの質問は解決済みといたします。
guest

回答2

0

やりたいことは、こんな感じのことでしょうか?

http://d.hatena.ne.jp/deeeki/touch/20100602/get_files_recursive

http://www.tech-step.net/185/

「php 再帰 画像 ファイル 取得」のキーワードで検索した結果より。

投稿2016/08/03 22:27

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

(PHPで)指定ディレクトリ以下を全部チェックしてファイル一覧を取得する方法
http://blog.asial.co.jp/1250

がありました。
自分なら面倒なんで find コマンド使っちゃうかなあ。

投稿2016/08/03 14:04

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwe001

2016/08/03 21:57

これで対応しました。再帰的というよりは、一つ下のディレクトリにアクセスできさえすればそれでいいという想定で作ったので、汎用的に使えるコードではないと思います。 ``` $images = []; $target_dir = $temp_dir; $entries = scandir($target_dir); if(count($entries) == 3) { $dir_name = array_values(array_diff($entries,['.','..']))[0]; $target_dir = "$target_dir/$dir_name"; $entries = scandir($target_dir); } foreach($entries as $entry){ if (preg_match('/^[0-9]+\.jpg$/', strtolower($entry))) { $images[] = $entry; } } ``` if(count($entries) == 3) というのは、ディレクトリには1つしかディレクトリがないため、scandirすると配列に「.」「..」「(サブディレクトリ名)」が入ってきます。この配列の数を数えているという処理です。当然親ディレクトリに対象ディレクトリ以外のファイルやディレクトリがあれば期待通りの結果にはならないでしょうね。一応これで解決ということで。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問