PHP流上下文->;在这种情况下如何使用?

PHP流上下文->;在这种情况下如何使用?,php,json,stream,Php,Json,Stream,我有一个系统,它将用户注释存储在自己的json文件中。我使用scandir();在获取所有文件和文件夹的目录上,但如何将其限制为json文件,我不希望数组中有其他文件,如“.”和“.”,因为我需要准确的计数 我在php.net上查看了这些信息,但没有弄清楚,也许您知道可以指向我的资源,或者使用哪个函数。没有流上下文参数可以帮助您筛选出文件类型 假设您的JSON文件是以.JSON扩展名保存的,您只需根据文件扩展名过滤掉数组 您可以使用来构建文件列表,或者简单地循环从scandir获得的结果,然后从

我有一个系统,它将用户注释存储在自己的json文件中。我使用scandir();在获取所有文件和文件夹的目录上,但如何将其限制为json文件,我不希望数组中有其他文件,如“.”和“.”,因为我需要准确的计数


我在php.net上查看了这些信息,但没有弄清楚,也许您知道可以指向我的资源,或者使用哪个函数。

没有流上下文参数可以帮助您筛选出文件类型

假设您的JSON文件是以
.JSON
扩展名保存的,您只需根据文件扩展名过滤掉数组

您可以使用来构建文件列表,或者简单地循环从
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

这是一个很好的例子,PHP库起到了解救作用
FilterIterator
是一个类,您可以扩展并重写它的accept方法,以便仅使用所需的文件。在本例中,我们使用标准的
文件系统发射器
对目录进行迭代。如果要在子目录中搜索json文件,还可以使用递归DirectoryIterator。此示例迭代当前目录中的json文件:

getExtension
存在于PHP>=5.3.6中


标准PHP库(SPL)的另一个鲜为人知的部分是。因此,如果您想要数组中的所有项,而不是仅对它们进行迭代,则可以执行以下操作:

$storageFiles = iterator_to_array(
    new StorageFilterIterator(new FilesystemIterator(__DIR__))
);

用一个混合的。好了,谢谢你,德鲁!我最终使用了if(pathinfo($filename,pathinfo_扩展名)!==“json”)continue;从我的scandir()数组中删除项。
$storageFiles = iterator_to_array(
    new StorageFilterIterator(new FilesystemIterator(__DIR__))
);