[英]PHP stream context -> how to use in this scenario?
我有一個系統將用戶注釋存儲在自己的json文件中。 我用scandir(); 在獲取所有文件和文件夾的目錄上,但如何將其限制為json文件,我不想要其他文件,如“。” 和數組中的“..”,因為我需要一個准確的計數。
我檢查了php.net上的信息,但無法弄明白,也許你知道你可以指向我的資源,或者使用哪個功能。
這是PHP庫拯救的一個可愛的例子。 FilterIterator
是一個擴展和覆蓋其accept方法的類,只使用您想要的文件。 在這種情況下,我們使用標准的FilesystemIterator
迭代目錄。 如果要在子目錄中搜索json文件,也可以使用RecursiveDirectoryIterator
。 此示例迭代當前目錄中的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)的另一個鮮為人知的部分是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.