после использования $files = новый DirectoryIterator () в PHP, как Вы сортируете объекты?

Вы не можете «пропустить» в зависимости от размера коллекции, потому что она не будет учитывать условия запроса.

Правильным решением является сортировка от желаемой конечной точки, ограничение размера набора результатов, а затем корректировка порядка результатов при необходимости.

Вот пример, основанный на реальном коде.

var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);

query.exec(function(err, results) {
    if (err) { 
    }
    else if (results.length == 0) {
    }
    else {
        results.reverse(); // put the results into the desired order
        results.forEach(function(result) {
            // do something with each result
        });
    }
});
5
задан hakre 25 November 2012 в 17:26
поделиться

2 ответа

Не похоже, что есть способ отсортировать данные внутри итератора.

Вы можете поместить отображаемые данные в промежуточный массив с ключом желаемого значения для сортировки и вызовите ksort () для массива. Однако это займет два прохода по данным.

$path = ".";
$files = new DirectoryIterator($path);
$files_array = array();

while($files->valid()) {
        // sort key, ie. modified timestamp
        $key = $files->getMTime();
        $data = $files->getFilename();
        $files_array[$key] = $data;
        $files->next();
}
ksort($files_array);
foreach($files_array as $key => $file){
    print $key . " => " . $file . "\n";
}

edit:

если вы поместите всю информацию, которую вы хотите вывести для файлов, в значения массива, вы можете просто после этого просто выполнить implode () массив вместо еще раз перебрать данные.

9
ответ дан 14 December 2019 в 19:22
поделиться
$files = new DirectoryIterator($path);
$i = 0;
$paths = array();
while($files->valid()) {
    $paths[$i++] = $files->getFileName();
    $files->next();
}
sort($paths)

Может быть то, что вы ищете, вы всегда можете, конечно, применить функцию сортировки для сортировки путей в зависимости от ваших предпочтений после этого.

-4
ответ дан 14 December 2019 в 19:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: