ユーザーのコメントを独自のjsonファイルに保存するシステムがあります。scandir();を使用します。すべてのファイルとフォルダーを取得するディレクトリにありますが、jsonファイルに制限するにはどうすればよいですか。「。」などの他のファイルは必要ありません。正確なカウントが必要なため、配列内の「..」。
php.netで情報を確認しましたが、理解できませんでした。おそらく、私に指示できるリソースや、使用する関数を知っているでしょう。
これは、PHPライブラリが助けになる素敵な例です。 FilterIterator
は、必要なファイルのみを使用するようにacceptメソッドを拡張およびオーバーライドするクラスです。この場合、標準を使用FilesystemIterator
してディレクトリを反復処理します。RecursiveDirectoryIterator
サブディレクトリでjsonファイルを検索する場合は、を使用することもできます。この例では、現在のディレクトリ内のjsonファイルを繰り返し処理します。
class StorageFilterIterator extends FilterIterator {
function accept() {
$item = $this->getInnerIterator()->current();
return $item->isFile() && $item->getExtension() === 'json';
}
}
$storageFiles = new StorageFilterIterator(new FilesystemIterator(__DIR__));
foreach ($storageFiles as $item) {
echo $item;
}
getExtension
PHPに存在する>=5.3.6
標準PHPライブラリ(SPL)のもう1つのあまり知られていない部分は、iterator_to_arrayです。したがって、すべてのアイテムを繰り返し処理するのではなく、配列内にすべてのアイテムが必要な場合は、次のようにすることができます。
$storageFiles = iterator_to_array(
new StorageFilterIterator(new FilesystemIterator(__DIR__))
);
ファイルの種類を除外するのに役立つストリームコンテキストパラメータはありません。
JSONファイルが拡張子付きで保存されていると仮定すると.json
、ファイル拡張子に基づいて配列をフィルターで除外する必要があります。
を使用readdir()
してファイルのリストを作成することも、取得した結果をループしてそこからscandir
新しい配列を作成することもできます。
以下を使用した例を次に示しreaddir
ます。
$files = array();
$dh = opendir($path);
while (($file = readdir($dh) !== false) {
if (pathinfo($path . '/' . $file, PATHINFO_EXTENSION) !== 'json') continue;
$files[] = $path . '/' . $file;
}
closedir($dh);
// $files now has an array of json files