回答編集履歴

8

変更

2021/07/26 07:02

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
 
33
- // ファイルかつ $ext が拡張子にマッチするものだけに絞り込むようにラップ
33
+ // $ext が拡張子にマッチするファイルだけに絞り込むようにラップ
34
34
 
35
- $filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext);
35
+ $filter = fn (\SplFileInfo $f) => !$f->isDir() && $f->getExtension($ext);
36
36
 
37
37
  return new \CallbackFilterIterator($iter, $filter);
38
38
 

7

不要

2021/07/26 07:02

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  {
20
20
 
21
- // 再帰可能イテレータを作成し, 「.」「..」は無視するように設定
21
+ // 再帰可能イテレータを作成し
22
22
 
23
- $iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
23
+ $iter = new \RecursiveDirectoryIterator($dir);
24
24
 
25
25
 
26
26
 

6

配列化

2021/07/26 06:53

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -50,4 +50,22 @@
50
50
 
51
51
  }
52
52
 
53
+
54
+
55
+ // 一気に配列化したい場合はこれで
56
+
57
+ $files = iterator_to_array(getFilesOfExt('/var/www/php', 'php'), false);
58
+
59
+
60
+
61
+ // 配列化+ファイル名だけ取り出す場合はこれで
62
+
63
+ $files = array_map(
64
+
65
+ fn (\SplFileInfo $file) => $file->getFilename(),
66
+
67
+ iterator_to_array(getFilesOfExt('/var/www/php', 'php'), false)
68
+
69
+ );
70
+
53
71
  ```

5

typo

2021/07/26 06:50

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -22,15 +22,19 @@
22
22
 
23
23
  $iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
24
24
 
25
+
26
+
25
27
  // リーフノードだけに絞り込むようにラップ
26
28
 
27
29
  $iter = new \RecursiveIteratorIterator($iter);
30
+
31
+
28
32
 
29
33
  // ファイルかつ $ext が拡張子にマッチするものだけに絞り込むようにラップ
30
34
 
31
35
  $filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext);
32
36
 
33
- return new \CallbackFilterIterator($dir, $filter);
37
+ return new \CallbackFilterIterator($iter, $filter);
34
38
 
35
39
  }
36
40
 

4

syntax error

2021/07/26 06:47

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -14,15 +14,21 @@
14
14
 
15
15
  */
16
16
 
17
- function getFileOfExt(string $dir, string $ext): \CallbackFilterIterator
17
+ function getFilesOfExt(string $dir, string $ext): \CallbackFilterIterator
18
18
 
19
19
  {
20
20
 
21
+ // 再帰可能イテレータを作成し, 「.」「..」は無視するように設定
22
+
21
23
  $iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
24
+
25
+ // リーフノードだけに絞り込むようにラップ
22
26
 
23
27
  $iter = new \RecursiveIteratorIterator($iter);
24
28
 
29
+ // ファイルかつ $ext が拡張子にマッチするものだけに絞り込むようにラップ
30
+
25
- $filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext));
31
+ $filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext);
26
32
 
27
33
  return new \CallbackFilterIterator($dir, $filter);
28
34
 
@@ -32,7 +38,7 @@
32
38
 
33
39
  // これで実行
34
40
 
35
- foreach (getFileOfExt('/var/www/php', 'php') as $file) {
41
+ foreach (getFilesOfExt('/var/www/php', 'php') as $file) {
36
42
 
37
43
  // $file は SplFileInfo オブジェクト
38
44
 

3

isFile 必要

2021/07/26 06:46

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  $iter = new \RecursiveIteratorIterator($iter);
24
24
 
25
- $filter = fn (\SplFileInfo $current) => $current->getExtension($ext));
25
+ $filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext));
26
26
 
27
27
  return new \CallbackFilterIterator($dir, $filter);
28
28
 

2

PHP 7.4

2021/07/26 06:44

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -22,11 +22,7 @@
22
22
 
23
23
  $iter = new \RecursiveIteratorIterator($iter);
24
24
 
25
- $filter = function (\SplFileInfo $current) use ($ext) {
26
-
27
- return $current->isFile() && $current->getExtension($ext);
25
+ $filter = fn (\SplFileInfo $current) => $current->getExtension($ext));
28
-
29
- };
30
26
 
31
27
  return new \CallbackFilterIterator($dir, $filter);
32
28
 

1

\ 漏れ

2021/07/26 06:42

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  };
30
30
 
31
- return new CallbackFilterIterator($dir, $filter);
31
+ return new \CallbackFilterIterator($dir, $filter);
32
32
 
33
33
  }
34
34