簡體   English   中英

PHP流上下文 - >在這種情況下如何使用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM