Сортировка по номерам и алфавиту - PullRequest
3 голосов
/ 30 марта 2011

Я наткнулся на этот блок кода, который извлекает изображения из указанной папки и выводит их с тегом img:

  <?php
            $url = "./images/";
            $handle = opendir ($url);
            while (false !== ($file = readdir($handle))) {
                if($file != "." && $file != ".." && $file != basename(__FILE__)) {
            echo '<a href="'.$url.$file.'" class="lightbox" title="'.$file.'"><img src="'.$url.$file.'" alt="" /></a><br />'; 
?>

Это прекрасно работает, но единственное, с чем я сталкиваюсь, это порядок изображений.

Итак, допустим, в моей папке images есть следующие изображения:

2.jpg
b.jpg
a.jpg
1.jpg

Как я могу сделать так, чтобы он перечислял изображения в числовом и алфавитном порядке? Мне бы хотелось, чтобы сначала пронумерованные изображения, а не алфавиты, чтобы в списке были такие изображения:

1.jpg
2.jpg
a.jpg
b.jpg

Ответы [ 5 ]

4 голосов
/ 30 марта 2011

То, что вам нужно, это сортировка на естественном языке.

используйте функцию php natsort () .. здесь ..

<?php
$url = "./images/";
$temp_files = scandir($url);
natsort($temp_files);
foreach($temp_files as $file) 
{
    if($file != "." && $file != ".." && $file != basename(__FILE__)) 
    {
        echo '<a href="'.$url.$file.'" class="lightbox" title="'.$file.'"><img src="'.$url.$file.'" alt="" /></a><br />';  
    }
}
?>
1 голос
/ 30 марта 2011

image

<?php
    $url = "./test/";
    $exclude = array('.', '..');
    $files = array_diff(scandir($url), $exclude);
    natsort($files);
    print_r(array_values($files));
?>

Выход:

Array
(
    [0] => 1.jpg
    [1] => 2.jpg
    [2] => a.jpg
    [3] => b.jpg
)
0 голосов
/ 30 марта 2011

Я бы сохранил имена файлов в массиве, а затем использовал бы sort() для упорядочения массива.Нет более простого способа сделать это из-за того, что reddir возвращает только имена файлов, например:

Имена файлов возвращаются в том порядке, в котором они хранятся в файловой системе.

0 голосов
/ 30 марта 2011

Функции scandir() и glob() могут возвращать массивы отсортированного содержимого каталога, или вы можете продолжать использовать opendir/readdir() для создания массива вручную.

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

0 голосов
/ 30 марта 2011

Вместо немедленного их отображения вы можете добавить ссылки в массив. Затем используйте sort($array), чтобы расположить их в правильном порядке, и отобразите их, пройдя каждый из них в цикле foreach, например: foreach($array as $image) { echo ... }.

Для получения дополнительной информации см .: http://php.net/manual/en/function.sort.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...