回答編集履歴
8
変更
answer
CHANGED
@@ -14,8 +14,8 @@
|
|
14
14
|
// リーフノードだけに絞り込むようにラップ
|
15
15
|
$iter = new \RecursiveIteratorIterator($iter);
|
16
16
|
|
17
|
-
//
|
17
|
+
// $ext が拡張子にマッチするファイルだけに絞り込むようにラップ
|
18
|
-
$filter = fn (\SplFileInfo $f) => $f->
|
18
|
+
$filter = fn (\SplFileInfo $f) => !$f->isDir() && $f->getExtension($ext);
|
19
19
|
return new \CallbackFilterIterator($iter, $filter);
|
20
20
|
}
|
21
21
|
|
7
不要
answer
CHANGED
@@ -8,8 +8,8 @@
|
|
8
8
|
*/
|
9
9
|
function getFilesOfExt(string $dir, string $ext): \CallbackFilterIterator
|
10
10
|
{
|
11
|
-
// 再帰可能イテレータを作成し
|
11
|
+
// 再帰可能イテレータを作成し
|
12
|
-
$iter = new \RecursiveDirectoryIterator($dir
|
12
|
+
$iter = new \RecursiveDirectoryIterator($dir);
|
13
13
|
|
14
14
|
// リーフノードだけに絞り込むようにラップ
|
15
15
|
$iter = new \RecursiveIteratorIterator($iter);
|
6
配列化
answer
CHANGED
@@ -24,4 +24,13 @@
|
|
24
24
|
// $file は SplFileInfo オブジェクト
|
25
25
|
var_dump($file->getFilename());
|
26
26
|
}
|
27
|
+
|
28
|
+
// 一気に配列化したい場合はこれで
|
29
|
+
$files = iterator_to_array(getFilesOfExt('/var/www/php', 'php'), false);
|
30
|
+
|
31
|
+
// 配列化+ファイル名だけ取り出す場合はこれで
|
32
|
+
$files = array_map(
|
33
|
+
fn (\SplFileInfo $file) => $file->getFilename(),
|
34
|
+
iterator_to_array(getFilesOfExt('/var/www/php', 'php'), false)
|
35
|
+
);
|
27
36
|
```
|
5
typo
answer
CHANGED
@@ -10,11 +10,13 @@
|
|
10
10
|
{
|
11
11
|
// 再帰可能イテレータを作成し, 「.」「..」は無視するように設定
|
12
12
|
$iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
|
13
|
+
|
13
14
|
// リーフノードだけに絞り込むようにラップ
|
14
15
|
$iter = new \RecursiveIteratorIterator($iter);
|
16
|
+
|
15
17
|
// ファイルかつ $ext が拡張子にマッチするものだけに絞り込むようにラップ
|
16
18
|
$filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext);
|
17
|
-
return new \CallbackFilterIterator($
|
19
|
+
return new \CallbackFilterIterator($iter, $filter);
|
18
20
|
}
|
19
21
|
|
20
22
|
// これで実行
|
4
syntax error
answer
CHANGED
@@ -6,16 +6,19 @@
|
|
6
6
|
* @param strint $ext
|
7
7
|
* @return \CallbackFilterIterator|\SplFileInfo[]
|
8
8
|
*/
|
9
|
-
function
|
9
|
+
function getFilesOfExt(string $dir, string $ext): \CallbackFilterIterator
|
10
10
|
{
|
11
|
+
// 再帰可能イテレータを作成し, 「.」「..」は無視するように設定
|
11
12
|
$iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
|
13
|
+
// リーフノードだけに絞り込むようにラップ
|
12
14
|
$iter = new \RecursiveIteratorIterator($iter);
|
15
|
+
// ファイルかつ $ext が拡張子にマッチするものだけに絞り込むようにラップ
|
13
|
-
$filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext)
|
16
|
+
$filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext);
|
14
17
|
return new \CallbackFilterIterator($dir, $filter);
|
15
18
|
}
|
16
19
|
|
17
20
|
// これで実行
|
18
|
-
foreach (
|
21
|
+
foreach (getFilesOfExt('/var/www/php', 'php') as $file) {
|
19
22
|
// $file は SplFileInfo オブジェクト
|
20
23
|
var_dump($file->getFilename());
|
21
24
|
}
|
3
isFile 必要
answer
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
{
|
11
11
|
$iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
|
12
12
|
$iter = new \RecursiveIteratorIterator($iter);
|
13
|
-
$filter = fn (\SplFileInfo $
|
13
|
+
$filter = fn (\SplFileInfo $f) => $f->isFile() && $f->getExtension($ext));
|
14
14
|
return new \CallbackFilterIterator($dir, $filter);
|
15
15
|
}
|
16
16
|
|
2
PHP 7.4
answer
CHANGED
@@ -10,9 +10,7 @@
|
|
10
10
|
{
|
11
11
|
$iter = new \RecursiveDirectoryIterator($dir, \FileSystemIterator::SKIP_DOTS);
|
12
12
|
$iter = new \RecursiveIteratorIterator($iter);
|
13
|
-
$filter = function (\SplFileInfo $current) use ($ext) {
|
14
|
-
|
13
|
+
$filter = fn (\SplFileInfo $current) => $current->getExtension($ext));
|
15
|
-
};
|
16
14
|
return new \CallbackFilterIterator($dir, $filter);
|
17
15
|
}
|
18
16
|
|
1
\ 漏れ
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
$filter = function (\SplFileInfo $current) use ($ext) {
|
14
14
|
return $current->isFile() && $current->getExtension($ext);
|
15
15
|
};
|
16
|
-
return new CallbackFilterIterator($dir, $filter);
|
16
|
+
return new \CallbackFilterIterator($dir, $filter);
|
17
17
|
}
|
18
18
|
|
19
19
|
// これで実行
|