Сортировать по алфавиту с помощью opendir()

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

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

это код

$max_width = 100;
$max_height = 100;
$imagedir = 'gifs/animals/'; //Remember trailing slash


function getPictureType($ext) {
    if ( preg_match('/jpg|jpeg/i', $ext) ) {
        return 'jpg';
    } else if ( preg_match('/png/i', $ext) ) {
        return 'png';
    } else if ( preg_match('/gif/i', $ext) ) {
        return 'gif';
    } else {
        return '';
    }
}

function getPictures() {
    global $max_width, $max_height, $imagedir;
    if ( $handle = opendir($imagedir) ) {
        $lightbox = rand();
        echo '<ul id="pictures">';
        while ( ($file = readdir($handle)) !== false ) {
            if ( !is_dir($file) ) {
                $split = explode($imagedir, $file); 
                $ext = $split[count($split) - 1];
                if ( ($type = getPictureType($ext)) == '' ) {
                    continue;
                }

                $name = substr($file, 0, -4);
                $title = str_replace("_"," ",$name);
                echo '<li><a href="'.$name.'">';
                echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />';
                echo '</a>';
                echo ''.$title.'';
                echo '</li>';
            }
        }
        echo '</ul>';

    }
}

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

Любая помощь будет принята с благодарностью!

Ваше здоровье.


person Polar    schedule 14.02.2012    source источник


Ответы (2)


Что не так с массивами? Также было бы лучше, если бы вы использовали pathinfo для получения имени файла и расширения.

$max_width = 100;
$max_height = 100;
$imagedir = 'gifs/animals/'; //Remember trailing slash


function getPictureType($ext) {
    if ( preg_match('/jpg|jpeg/i', $ext) ) {
        return 'jpg';
    } else if ( preg_match('/png/i', $ext) ) {
        return 'png';
    } else if ( preg_match('/gif/i', $ext) ) {
        return 'gif';
    } else {
        return '';
    }
}

function getPictures() {
    global $max_width, $max_height, $imagedir;
    if ( $files = scandir($imagedir) ) {
        $lightbox = rand();
        echo '<ul id="pictures">';
        foreach ($files as $file) {
            $full_path = $imagedir.'/'.$file;
            if ( !is_dir($file) ) {
                $finfo = pathinfo($full_path); 
                $ext = $finfo['extension'];
                if ( ($type = getPictureType($ext)) == '' ) {
                    continue;
                }

                $name = $finfo['filename'];
                $title = str_replace("_"," ",$name);
                echo '<li><a href="'.$name.'">';
                echo '<img src="thumbs/'.$file.'" class="pictures" alt="'.$file.'" />';
                echo '</a>';
                echo ''.$title.'';
                echo '</li>';
            }
        }
        echo '</ul>';

    }
}
person core1024    schedule 14.02.2012

Вы можете использовать glob() для получения файлов из каталога, отсортированных по алфавиту:

$files = glob('gifs/animals/*.{gif,jpg,png}', GLOB_BRACE);

Чтобы перебрать ваши файлы, используйте цикл foreach:

foreach($files as $file){
    $title = str_replace("_"," ",$file);
    echo '<li><a href="'.$name.'">';
    echo '<img src="thumbs/'.basename($file).'" class="pictures" alt="'.basename($file).'" />';
    echo '</a>';
    echo ''.$title.'';
    echo '</li>';
}
person konsolenfreddy    schedule 14.02.2012
comment
Это работает с сортировкой по алфавиту, и я очень признателен за ваш ответ. Однако, поскольку $file теперь выводит /gifs/animals/image.gif, я не могу сделать правильную ссылку на превью, расположенное в gifs/animals/thumbs. - person Polar; 14.02.2012
comment
@Polar: используйте basename(), чтобы удалить путь, я соответствующим образом обновил свой ответ. - person konsolenfreddy; 14.02.2012