ディレクトリーを配列にする方法 - PHPプロ!Q&A掲示板

2622

  • 0P

ディレクトリーを配列にする方法

質問日時 / 2010年3月13日 14:00 (最終編集:3月13日 14:44)    回答数 / 7件

Questioner:  litlithuthut  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

いつもお世話になっております。

testというディレクトリーにある全てのディレクトリーを配列にして、そのディレクトリー名だけを取得したいのですが、どうすればよいのでしょうか??


▽例
test/a
test/b
test/c
test/d

この配列を使ってa,b,c,dに入っているtest.datというファイルの中身を取り出したいと思っています。

そのtest.datには、


あ,い,う,え,お

と入っていると仮定します。


  1. <?php
  2. /*ここにディレクトリーを配列にしてファイル名を取得する処理を入れたい*/
  3. $array=(a,b,c,d);
  4.  
  5. /*この$arrayの部分は、手動で書いていますので、処理出来ますが、自動的にファイル名を取得出来るのが理想です。多分、この前にもう一回foreachかfor等ではないかとは思うのですが、よくわかりません(>_<)*/
  6.  
  7. foreach($array as $item){
  8. $file="test/$item/test.dat";
  9. $file1=file_get_contents($file);
  10. $data=explode(",","$file1");
  11. echo"■質問1<br>";
  12. echo"$data[0]";
  13. echo"■質問2<br>";
  14. echo"$data[1]";
  15. echo"■質問3<br>";
  16. echo"$data[2]";
  17. echo"■質問4<br>";
  18. echo"$data[3]";
  19. echo"■質問5<br>";
  20. echo"$data[4]";
  21. }
  22. ?>

これで
test/a/test.dat
の中身だけは、表示出来ます。

これをa~dまでforeachで処理したいと思っていますが、やり方がわかりません。

わかる方、初心者でもわかるように具体的に教えて頂けると助かります。
宜しくお願い致します!!

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01shimix>具体的に教えて頂けると助かります。 RTFM   
 ┗A01-1litlithuthut回答頂けて助かりました。 ありがとうございました。
  ┗A01-1-1shimix>ただ結果が以下のように表示されるのですが、 そ
   ┗A01-1-1-1litlithuthut回答頂きありがとうございますm(__)m もう一回fore
    ┗A01-1-1-1-1shimixひとつ前のレスだけど・・ >echo$entry; >として
     ┗A01-1-1-1-1-1litlithuthut今は、なんとなくしか理解出来てませんが、めっちゃ勉
      ┗A01-1-1-1-1-1-1signal悪いと思ったなら顔文字を使うのをやめましょう まる

回答一覧

並び替え:

A01
answerershimix [3月13日 15:30] (最終編集:3月13日 15:45)

>具体的に教えて頂けると助かります。

RTFM
   ディレクトリ関数 http://www.php.net/manual/ja/ref.dir.php
    指定されたパスのファイルとディレクトリのリストを取得する 
      http://www.php.net/manual/ja/function.scandir.php

   ファイルシステム関数 http://www.php.net/manual/ja/ref.filesystem.php
    ファイルがディレクトリかどうかを調べる
      http://www.php.net/manual/ja/function.is-dir.php


(以下蛇足)
  1. <?php
  2. $dirpath = 'test';
  3. $dirlist = array();
  4.  
  5. $entrylist = scandir($dirpath);
  6. foreach ($entrylist as $entry) {
  7.   if ($entry == '.') { continue} // selfdir除外
  8.   if ($entry == '..') { continue} // parent除外
  9.   if (is_dir($dirpath . '/' . $entry)) { $dirlist[] = $entry}
  10. }
  11. var_dump($dirlist)// 結果確認
  12. ?>


>これで
>test/a/test.dat
>の中身だけは、表示出来ます。
>
>これをa~dまでforeachで処理したいと思っていますが、やり方がわかりません。

test/b/test.dat(同様にc,dの下のtest.dat)を取得出来ない要因は見当たりません。あえて言うなら
  1. $array=(a,b,c,d);
これはエラーになりますよね?動かないソースを例示されても、お手元で試されている(動いている)ソースとの違いがわからないので、何とも言えません。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerlitlithuthut [3月13日 15:44] (最終編集:3月13日 15:49)

回答頂けて助かりました。
ありがとうございました。

ただ結果が以下のように表示されるのですが、
array(2) { [0]=>  string(1) "a" [1]=>  string(1) "b" }

ファイル名だけ表示させるには、どうすればよいのでしょうか??
a
b
のようにファイル名だけが出るのが理想ですm(__)m
宜しくお願い致します。

echo$entry;
としてみたら ab とまとめて出てしまいました。

この意見に回答する

ツリーへ TOPへ

A01-1-1
replyershimix [3月13日 15:47] (最終編集:3月13日 15:51)

>ただ結果が以下のように表示されるのですが、

それはvar_dumpさせているからです。配列$dirlistに入っているのですからforeachで取り出してください。

  1. foreach ($dirlist as $dirname) {
  2.   print $dirname . "<br />";
  3. }

これすら応用出来ないようだと、ここから読んでもらわないと・・

  http://www.php.net/manual/ja/function.var-dump.php
  http://www.php.net/manual/ja/language.types.php
  http://www.php.net/manual/ja/language.control-structures.php


ひょっとして同一アカウントを複数の方で使い回されてるんですか?もう初心者(というか、こういう部分で躓く)レベルじゃないと思うのですが・・

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerlitlithuthut [3月13日 15:51] (最終編集:3月13日 16:08)

回答頂きありがとうございますm(__)m

もう一回foreachなのですね。

教えて頂いた部分をみてみます(>_<)

ありがとうございました。

すみません、えっと、友達と勉強してるので、使い回してますm(__)m

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1
replyershimix [3月13日 16:15] (最終編集:3月13日 16:20)

ひとつ前のレスだけど・・

>echo$entry;
>としてみたら ab とまとめて出てしまいました。

foreachの中で・・ですよね。単に<br>がないから表示が繋がってるだけですよ。出力は「a」「b」の順にされてます。


最初のレスにしたって「配列に入れたい」というのであの流れになってますが、foreachの中で必要な処理をしてもOKです(というか、それが普通です)。

  1. <?php
  2. $dirpath = 'test';
  3. $dirlist = array();
  4.  
  5. $entrylist = scandir($dirpath);
  6. foreach ($entrylist as $entry) {
  7.   if ($entry == '.') { continue} // selfdir除外
  8.   if ($entry == '..') { continue} // parent除外
  9.   if (!is_dir($dirpath . '/' . $entry)) { continue} // ディレクトリ「以外」は除外
  10.  
  11.   $file = 'test/' . $entry . '/test.dat';
  12.   if (!file_exists($file)) { continue} // ファイルがなければskip
  13.   $text = file_get_contents($file);
  14.   $data = explode(','$text);
  15.   $ct = 1;
  16.   foreach ($data as $item) {
  17.     echo '■質問 ' $ct++ . '<br>';
  18.     echo $item;
  19.   }
  20.  
  21. }
  22. ?>



(追記)
>すみません、えっと、友達と勉強してるので、使い回してますm(__)m

やめてください(怒

そういうことであれば、もうレスしません。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1
replyerlitlithuthut [3月13日 17:24]

今は、なんとなくしか理解出来てませんが、めっちゃ勉強になります(>_<)

へんな事したのに答えて貰って感謝ですm(__)m

以後、気をつけます(>_<)

まだ何も完成していないので、それらしい形になってわからなくなったらまたお願いします(>_<)

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1-1-1
replyersignal [3月18日 12:53]

悪いと思ったなら顔文字を使うのをやめましょう
まるで友達と携帯メールのノリですよ

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)