回答編集履歴
8
変更
test
CHANGED
@@ -30,9 +30,9 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
//
|
33
|
+
// $ext が拡張子にマッチするファイルだけに絞り込むようにラップ
|
34
34
|
|
35
|
-
$filter = fn (\SplFileInfo $f) => $f->is
|
35
|
+
$filter = fn (\SplFileInfo $f) => !$f->isDir() && $f->getExtension($ext);
|
36
36
|
|
37
37
|
return new \CallbackFilterIterator($iter, $filter);
|
38
38
|
|
7
不要
test
CHANGED
@@ -18,9 +18,9 @@
|
|
18
18
|
|
19
19
|
{
|
20
20
|
|
21
|
-
// 再帰可能イテレータを作成し
|
21
|
+
// 再帰可能イテレータを作成し
|
22
22
|
|
23
|
-
$iter = new \RecursiveDirectoryIterator($dir
|
23
|
+
$iter = new \RecursiveDirectoryIterator($dir);
|
24
24
|
|
25
25
|
|
26
26
|
|
6
配列化
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
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($
|
37
|
+
return new \CallbackFilterIterator($iter, $filter);
|
34
38
|
|
35
39
|
}
|
36
40
|
|
4
syntax error
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 必要
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
$iter = new \RecursiveIteratorIterator($iter);
|
24
24
|
|
25
|
-
$filter = fn (\SplFileInfo $
|
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
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
|
-
|
25
|
+
$filter = fn (\SplFileInfo $current) => $current->getExtension($ext));
|
28
|
-
|
29
|
-
};
|
30
26
|
|
31
27
|
return new \CallbackFilterIterator($dir, $filter);
|
32
28
|
|
1
\ 漏れ
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
|
|