Ordenar e lista de diretórios de exibição em ordem alfabética usando opendir () em php

votos
13

php do noob aqui - eu remendada este script para exibir uma lista de imagens a partir de uma pasta com opendir, mas eu não posso trabalhar para fora como (ou onde) para classificar a matriz em ordem alfabética

<?php

// opens images folder
if ($handle = opendir('Images')) {
while (false !== ($file = readdir($handle))) {

// strips files extensions  
$crap   = array(.jpg, .jpeg, .JPG, .JPEG, .png, .PNG, .gif, .GIF, .bmp, .BMP, _, -);    

$newstring = str_replace($crap,  , $file );   

//asort($file, SORT_NUMERIC); - doesnt work :(

// hides folders, writes out ul of images and thumbnails from two folders

    if ($file != . && $file != .. && $file != index.php && $file != Thumbnails) {
    echo <li><a href=\Images/$file\ class=\thickbox\ rel=\gallery\ title=\$newstring\><img src=\Images/Thumbnails/$file\ alt=\$newstring\ width=\300\  </a></li>\n;}
}
closedir($handle);
}

?>

Qualquer conselho ou ponteiros seria muito apreciada!

Publicado 19/05/2009 em 21:55
fonte usuário
Em outras línguas...                            


5 respostas

votos
21

Você precisa ler seus arquivos em uma matriz antes de você pode classificá-los. Que tal agora?

<?php
$dirFiles = array();
// opens images folder
if ($handle = opendir('Images')) {
    while (false !== ($file = readdir($handle))) {

        // strips files extensions      
        $crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    

        $newstring = str_replace($crap, " ", $file );   

        //asort($file, SORT_NUMERIC); - doesnt work :(

        // hides folders, writes out ul of images and thumbnails from two folders

        if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {
            $dirFiles[] = $file;
        }
    }
    closedir($handle);
}

sort($dirFiles);
foreach($dirFiles as $file)
{
    echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\"  </a></li>\n";
}

?>

Edit: Isso não está relacionado com o que está pedindo, mas você pode obter um tratamento mais genérico de extensões de arquivo com o pathinfo () função também. Você não precisa de uma matriz codificados de extensões, então, você pode remover qualquer extensão.

Respondeu 19/05/2009 em 22:14
fonte usuário

votos
9

utilização opendir()

opendir()não permite que a lista a ser classificada. Você terá que executar a ordem manualmente. Para isso, adicione todos os nomes de arquivos para uma matriz em primeiro lugar e classificá-los com sort():

$path = "/path/to/file";

if ($handle = opendir($path)) {
    $files = array();
    while ($files[] = readdir($dir));
    sort($files);
    closedir($handle);
}

E , em seguida, incluí-los usando foreach:

$blacklist = array('.','..','somedir','somefile.php');

foreach ($files as $file) {
    if (!in_array($file, $blacklist)) {
        echo "<li>$file</a>\n <ul class=\"sub\">";
    }
}

utilização scandir()

Isto é muito mais fácil com scandir(). Ele executa a classificação para você por padrão. A mesma funcionalidade pode ser conseguida com o seguinte código:

$path = "/path/to/file";
$blacklist = array('somedir','somefile.php');

// get everything except hidden files
$files = preg_grep('/^([^.])/', scandir($path)); 

foreach ($files as $file) {
    if (!in_array($file, $blacklist)) {
        echo "<li>$file</a>\n <ul class=\"sub\">";
    }
}

Usando DirectoryIterator(preferido)

$path = "/path/to/file";
$blacklist = array('somedir','somefile.php');

foreach (new DirectoryIterator($path) as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $file =  $path.$fileInfo->getFilename();
    echo "<li>$file</a>\n <ul class=\"sub\">";
}
Respondeu 18/04/2014 em 01:03
fonte usuário

votos
3

Esta é a maneira que eu faria isso

if(!($dp = opendir($def_dir))) die ("Cannot open Directory.");
while($file = readdir($dp))
{
    if($file != '.')
    {
        $uts=filemtime($file).md5($file);  
        $fole_array[$uts] .= $file;
    }
}
closedir($dp);
krsort($fole_array);

foreach ($fole_array as $key => $dir_name) {
  #echo "Key: $key; Value: $dir_name<br />\n";
}
Respondeu 09/10/2011 em 23:20
fonte usuário

votos
1

Nota: Mova esta para o loop foreach para que a variável newString fica renomeado corretamente.

// strips files extensions      
$crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    

$newstring = str_replace($crap, " ", $file );
Respondeu 17/03/2010 em 03:04
fonte usuário

votos
0
$directory = scandir('Images');
Respondeu 26/06/2009 em 09:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more