1

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

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

4

2 回答 2

3

这是一个很好的例子,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__))
);
于 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 回答