php kullanarak bir klasördeki dosyaların listesini sipariş

3 Cevap php

Ben bir açılır menü içinde bir dizinin tüm dosyaları görüntülemek için aşağıdaki kodu kullanıyorum. Herkes bu alfabetik nasıl biliyor mu? Ben sıralama fonksiyonu ile ilgisi var sanırım, ben sadece anlamaya olamaz!

<?php
$dirname = "images/";
$images = scandir($dirname);
$dh = opendir($dirname);

while ($file = readdir($dh)) {
if (substr($file, -4) == ".gif") {
print "<option value='$file'>$file</option>\n"; }
}
closedir($dh);
?>

3 Cevap

Neden (scandir kullanarak tüm dosya isimlerini okuyor) ve daha sonra readdir () yöntemi ile onları aracılığıyla döngü? Siz sadece bunu yapabiliriz:

<?php

$dirname = "images/";
$images = scandir($dirname);

// This is how you sort an array, see http://php.net/sort
sort($images);

// There's no need to use a directory handler, just loop through your $images array.
foreach ($images as $file) {
    if (substr($file, -4) == ".gif") {
        print "<option value='$file'>$file</option>\n"; }
    }
}

?>

Ayrıca sort() olarak aynı şekilde çalışır, ancak "doğal düzen" in sıralar, hangi natsort() kullanmak isteyebilirsiniz. (Yerine olarak sıralamak 1,10,2,20 o olacak sıralama olarak 1,2,10,20.)

scandir

array scandir ( string $directory [, int $sorting_order [, resource $context ]] )

Returns an array of files and directories from the directory . Parameters

directory The directory that will be scanned.

sorting_order By default, the sorted order is alphabetical in ascending order. If the optional sorting_order is used (set to 1), then the sort order is alphabetical in descending order.

William Macdonald belirttiği gibi here scandir() aslında onun $sorting_order parametresi (veya varsayılan göre dönen diziyi sıralamak olacaktır: "Varsayılan olarak , kriteri sipariş artan düzende alfabetik olduğunu. "). Kodunuzu sorun $images = scandir($dirname); kullanarak dizindeki dosyaların dizi oluşturmak ama daha fazla üzerinde kodunuzda döndürülen dizi kullanmayın olmasıdır. Bunun yerine başka bir yöntemi kullanarak dizin içeriği üzerinde yineleme:

$dh = opendir($dirname);
while ($file = readdir($dh)) {
    if (substr($file, -4) == ".gif") {
        print "<option value='$file'>$file</option>\n"; 
    }
}
closedir($dh);

Lütfen sonucu sıralanır nedeni budur.