teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

続きも書いた

2015/12/04 16:29

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -6,6 +6,7 @@
6
6
  注意:`.`や`..`のパスがゴミですので、無視するようにしてください。
7
7
 
8
8
  ```PHP
9
+ <?php
9
10
  $path = "./hoge/";
10
11
  $files = array_filter(
11
12
  scandir($path, SCANDIR_SORT_DESCENDING),
@@ -13,4 +14,65 @@
13
14
  return !in_array($file, ['.', '..']);
14
15
  }
15
16
  );
16
- ```
17
+ ```
18
+
19
+ ---
20
+
21
+ 更に要求ベースまで掘り下げてみましょう。
22
+ PHPは初期の段階ではHomePageプリプロセッサという名称から始まった程、
23
+ HTMLとの親和性が高い事が特徴です。
24
+
25
+ 好き嫌いははっきり別れますが、
26
+ 個人的には下記のようなテンプレート的な書き方を好んで使ってます。
27
+ その場合、Stringの配列のまま出力箇所まで持っていくと良いです。
28
+
29
+ ```PHP
30
+ <?php
31
+ // 配列を準備
32
+ $path = 'hoge';
33
+ $files = ['20151204/112345.log', '20151203/102345.log'];
34
+ ?>
35
+ <?php foreach($files as $file): ?>
36
+ <li><a href="<?= $path.'/'.$file ?>"><?= $file ?></a></li>
37
+ <?php endforeach; ?>
38
+ ```
39
+
40
+ ---
41
+
42
+ 最後にこの2つを使ってみます。
43
+
44
+ ```PHP
45
+ <?php
46
+ $path = "./hoge";
47
+ $dirs = array_filter(
48
+ scandir($path, SCANDIR_SORT_DESCENDING),
49
+ function($dir) use($path){
50
+ if (in_array($dir, ['.', '..']) {
51
+ return false;
52
+ }
53
+ return is_dir($path.'/'.$dir);
54
+ }
55
+ );
56
+ $files = [];
57
+ foreach ($dirs as $dir) {
58
+ $child_path = $path.'/'.$dir;
59
+ $items = scandir($child_path, SCANDIR_SORT_DESCENDING);
60
+ foreach ($items as $file) {
61
+ if (in_array($file, ['.', '..']) {
62
+ continue;
63
+ }
64
+ if (is_dir($child_path.'/'.$file) {
65
+ continue;
66
+ }
67
+ $files[] = $dir.'/'.$file;
68
+ }
69
+ }
70
+ ?>
71
+
72
+ <?php foreach($files as $file): ?>
73
+ <li><a href="<?= $path.'/'.$file ?>"><?= $file ?></a></li>
74
+ <?php endforeach; ?>
75
+ ```
76
+
77
+ ちょっとごつくなってしまいましたね。。。。
78
+ 回答の一案とでも考えてください。

1

syntax errorを修正

2015/12/04 16:29

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  [PHPマニュアル:scandir](http://php.net/manual/ja/function.scandir.php)
2
2
 
3
- 降順にも引数一撃で出来るので一発解決ですね!
3
+ 昇順にも降順にも引数一撃で出来るので一発解決ですね!
4
4
  PHPはビルトイン関数、特に配列やテキスト操作が強力なので探してみて下さい。
5
5
 
6
6
  注意:`.`や`..`のパスがゴミですので、無視するようにしてください。
@@ -10,7 +10,7 @@
10
10
  $files = array_filter(
11
11
  scandir($path, SCANDIR_SORT_DESCENDING),
12
12
  function($file){
13
- return !in_array($file, ['.', '..'])
13
+ return !in_array($file, ['.', '..']);
14
14
  }
15
15
  );
16
16
  ```