1

ユーザーのコメントを独自のjsonファイルに保存するシステムがあります。scandir();を使用します。すべてのファイルとフォルダーを取得するディレクトリにありますが、jsonファイルに制限するにはどうすればよいですか。「。」などの他のファイルは必要ありません。正確なカウントが必要なため、配列内の「..」。

php.netで情報を確認しましたが、理解できませんでした。おそらく、私に指示できるリソースや、使用する関数を知っているでしょう。

4

2 に答える 2

3

これは、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;
}

getExtensionPHPに存在する>=5.3.6


標準PHPライブラリ(SPL)のもう1つのあまり知られていない部分は、iterator_to_arrayです。したがって、すべてのアイテムを繰り返し処理するのではなく、配列内にすべてのアイテムが必要な場合は、次のようにすることができます。

$storageFiles = iterator_to_array(
    new StorageFilterIterator(new FilesystemIterator(__DIR__))
);
于 2012-09-07T00:35:39.440 に答える
0

ファイルの種類を除外するのに役立つストリームコンテキストパラメータはありません。

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
于 2012-09-07T00:25:30.627 に答える