有沒有一種簡單的方法來在PHP中對迭代器進行排序(不需要將它全部拉入數組中並對其進行排序)。排序PHP迭代器
我的具體示例是DirectoryIterator,但是對任何迭代器都有一個通用解決方案會很好。
$dir = new DirectoryIterator('.');
foreach ($dir as $file)
echo $file->getFilename();
我希望能夠通過各種標準(文件名,大小等)
有沒有一種簡單的方法來在PHP中對迭代器進行排序(不需要將它全部拉入數組中並對其進行排序)。排序PHP迭代器
我的具體示例是DirectoryIterator,但是對任何迭代器都有一個通用解決方案會很好。
$dir = new DirectoryIterator('.');
foreach ($dir as $file)
echo $file->getFilename();
我希望能夠通過各種標準(文件名,大小等)
有沒有辦法做到這一點排序這些。迭代器應該「遍歷」整個列表。您必須對底層列表進行排序以實現所需的行爲。
順便說一句,更完整參考SPL是在這裏: http://www.php.net/~helly/php/ext/spl/
你必須使用iterator_to_array減少(),然後uasort()。而且,在我的性能測試中,速度足夠快。
您的具體例子,我知道使用迭代器的最緊湊的方法是如下:
// get (recursively) files matching a pattern, each file as SplFileInfo object
$matches = new RegexIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/files/')
),
'/(\.php|\.ini|\.xml)$/i'
);
$files = iterator_to_array($matches);
// sort them by name
uasort($files, create_function('$a,$b', 'return strnatcasecmp($a->getFilename(), $b->getFilename());'));
對於這裏是5年後結束了的那些:
如果使迭代器的擴展ArrayIterator可以使用
ArrayIterator :: uasort(按價值排序)和ArrayIterator :: uksort(按鍵排序)
這就是我害怕的 – Greg 2008-10-31 10:58:51