我有一个将用户评论存储在其自己的单独 json 文件中的系统。我使用 scandir(); 在获取所有文件和文件夹的目录上,但是如何将其限制为 json 文件,我不想要其他文件,例如“。” 和数组中的“..”,因为我需要准确的计数。
我查看了 php.net 上的信息,但无法弄清楚,也许您知道可以指向我的资源,或者使用哪个函数。
这是一个很好的例子,PHP 库来拯救。 FilterIterator
是您扩展并覆盖其接受方法以仅使用您想要的文件的类。在这种情况下,我们使用标准FilesystemIterator
来迭代目录。RecursiveDirectoryIterator
如果要在子目录中搜索 json 文件,也可以使用 a 。此示例遍历当前目录中的 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