我有一个系统可以将用户注释存储在自己的json文件中。我用scandir();在获取所有文件和文件夹的目录上,但如何将其限制为json文件,我不想要其他文件,如“。”和数组中的“..”,因为我需要准确的计数。
我查看了php.net上的信息,但无法弄清楚,也许你知道你可以指向我的资源,或者使用哪种功能。
答案 0 :(得分:3)
这是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__))
);
答案 1 :(得分: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