Posted at

[PHP] 階層構造のファイルを再帰関数で一括検索する

以下の構造から csv ファイルを一括取得するパターン

~/work/glob

❯ tree
.
├── 0.csv
├── foo
│   ├── 1.csv
│   └── bar
│   ├── 2.csv
│   └── hoge
│   └── 3.csv
└── index.php

3 directories, 5 files

<?php

function csvs(array $results = [], int $hierarchy = 1): array
{
$addFiles = [];
foreach (glob('./' . implode('/', array_fill(0, $hierarchy, '*')) . '.csv') as $file) {
$addFiles[] = $file;
}
if (0 === count($addFiles)) {
return $results;
}
return csvs(array_merge($results, $addFiles), ++$hierarchy);
}

print_r(csvs());

結果

❯ php index.php

Array
(
[0] => ./0.csv
[1] => ./foo/1.csv
[2] => ./foo/bar/2.csv
[3] => ./foo/bar/hoge/3.csv
)

正直再帰ってなんの役に立つの?状態でしたが少し仲良くなれました:raised_hands: