Сортиране по азбучен ред с 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="/bg'.$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="/bg'.$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="/bg'.$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