2009-07-28 3 views
0

Ich habe diesen Code geschrieben, PHP seit 2 Jahren nicht mehr verwendet, um einen Ordner von Fotos durchzulaufen und sie auf die Seite in alphabetischer Reihenfolge zu schreiben. Es ist eine ziemlich einfache Anfrage, aber es dauerte 15 Minuten, um zu schreiben.Kann dieser Code zum Durchlaufen von Fotos in einem Ordner optimiert werden?

if ($handle = opendir('photos')) { 
    $count = 0; 
    $list[] = array(); 
    while (false !== ($file = readdir($handle))) { 
    if ($file != "." && $file != "..") { 
     $list[$count] = $file; 
     $count ++; 
    } 
    } 
    closedir($handle); 
    asort($list); 
    $sorted_list = array(); 
    $sorted_list = array_values($list); 
    foreach ($sorted_list as $i => $value) { 
    echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n"; 
    } 
}

Habe ich es total falsch geschrieben? Gibt es Möglichkeiten, den Code zu verbessern? Jede konstruktive Rückmeldung gerne erhalten.

Antwort

2

Sie die Vorteile der scandir() nehmen könnte Funktion, die das Lesen des Verzeichnisses wie wir behandeln wird ll als Sortieren der Ergebnisse.

$files = scandir('photos'); 
if ($files !== false) 
{ 
    foreach($files as $f) { 
     if ($f == '..' || $f == '.') continue;  
     echo '<li><img src="photos/'.$f.'" alt="'.$f.'" title=""></li>'."\n"; 
    } 
} 

Ich bearbeitet es ein bisschen für die Lesbarkeit.

0

Sie benötigen keine $count. Dies gibt Ihnen das gleiche Ergebnis

$list[] = array(); 
while (false !== ($file = readdir($handle))) { 
    if ($file != "." && $file != "..") { 
     $list[] = $file; 
    } 
} 

ersetzen Sortieren und Anzeigen mit nur:

sort($list); 
for ($i = 0; $i < count($list); $i++) { 
    echo "<li><img src=\"photos/{$list[$i]}\" alt=\"{$list[$i]}\" title=\"\"></li>\n"; 
} 
+2

ändern $ list [] = array() zu $ ​​list = array(). Sie möchten auch natsort() anstelle von sort() verwenden. :-) –

1

Try this:

$photos = glob('photos/*'); 
foreach($photos as $photo) { 
    echo "<li><img src=\"{$photo}" alt=\"{$photo}\" title=\"\"></li>\n"; 

} 

http://us.php.net/manual/en/function.glob.php

+0

vielleicht glob ('photos/*. Jpg'); Nur um sicher zu gehen. – Skilldrick

+0

yeah, Sie wissen, dass sie jpgs sind, ist es eine gute Idee, die Erweiterung zu verwenden. Aber sie könnten theoretisch eines von mehreren Fotoformaten sein. – davethegr8

0

können Sie ersetzen

foreach ($sorted_list as $i => $value) { 
    echo "<li><img src=\"photos/$sorted_list[$i]\" alt=\"$sorted_list[$i]\" title=\"\"></li>\n"; 
    } 

mit

foreach ($sorted_list as $value) { 
    echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n"; 
} 

Dann brauchen Sie nicht array_values ​​() aufzurufen, weil es keine Rolle spielt, dass die Array-Schlüssel sind nicht in numerischer Reihenfolge .

0

Eine einfachere Art und Weise wird mit der scandir Funktion:

$dir = 'photos'; 
$files = array_diff(scandir($dir), array(".", "..")); 
foreach ($files as $i => $value) { 
    echo "<li><img src=\"photos/$value\" alt=\"$value\" title=\"\"></li>\n"; 
} 

viel Glück!

Verwandte Themen