Bir klasördeki fotoğrafları döngü bu kodu optimize edilebilir?

5 Cevap php

Ben fotoğrafları bir klasöre döngü 2 yıldır PHP kullanılan ve alfabetik sayfaya bunları yazmak değil sahip bu kodu yazdım. Bu oldukça basit bir istek ama bana yazmak için 15 dakika iyi yer aldı.

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";
  }
}

Ben bunu tamamen yanlış şekilde yazdım? Ben kodu artırabilirsiniz yolları var mı? Herhangi bir yapıcı geribildirim memnuniyetle aldı.

5 Cevap

Sen dizin okuma yanı sıra sonuçlarını sıralamak idare edecek scandir() fonksiyonu, yararlanabilir.

$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";
    }
}

Ben bunu okunabilmesi için biraz düzenlenebilir.

Bu deneyin:

$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

Sen $count gerekmez. Bu size aynı sonucu verecektir

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

Sıralama ve sadece görüntüleme ile değiştirin:

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

Siz değiştirebilirsiniz

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

ile

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

Bu dizi anahtarları sayısal sırayla olmadığı önemli değil, çünkü o zaman,) array_values ​​(aramak gerekmez.

Bir simplier yol scandir fonksiyonunu kullanıyor:

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

iyi şanslar!