0

我在 php.net opendir()进行了检查,但发现无法控制 opendir() 获取的文件的顺序。

我有一个幻灯片,但我无法控制图像的顺序。我尝试更改名称并使用01.img, 02.img,...,20.img但没有成功。

我的脚本:

<?php
$path2 = "./img/";
function createDir($path2 = './img'){   
    if ($handle = opendir($path2)){
        echo "<ul class=\"ad-thumb-list\">";
        while (false !== ($file = readdir($handle))){
            if (is_dir($path2.$file) && $file != '.' && $file !='..')
                printSubDir($file, $path2, $queue);
            else if ($file != '.' && $file !='..')
                $queue[] = $file;
        }
        printQueue($queue, $path2);
        echo "</ul>";
    }
}

function printQueue($queue, $path2){
    foreach ($queue as $file){
        printFile($file, $path2);
    } 
}

function printFile($file, $path2){
    if ($file=="thumbs.db") {echo "";}
    else{
        echo "<li><a href=\"".$path2.$file."\">";
        echo "<img src=\"".$path2.$file."\" class='thumbnail'></a></li>";
    }
}

/*function printSubDir($dir, $path2)
{
}*/

createDir($path2);
?>
4

3 回答 3

2

使用scandir()natsort()

重写代码:

function createDir($path2 = './img'){   
    $dirContents = scandir($path2);
    natsort($dirContents);

    echo "<ul class=\"ad-thumb-list\">";

    // You should actually add the line below!
    // $queue = array();    
    foreach ($dirContents as $entry) {
      if ($entry == '.' || $entry == '..') {
        continue;
      }

      $entryPath = $path2 . $entry;
      if (is_dir($entryPath)) {
        printSubDir($entry, $path2, $queue);
      }
      else {
        $queue[] = $entry;
      }
    }
    printQueue($queue, $path2);
    echo "</ul>";
  }
}
于 2013-10-09T14:41:27.110 回答
1

如果您使用的是 PHP 5,则可以尝试使用 scandir()。它有一个排序参数。

http://us1.php.net/scandir

array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )
于 2013-10-09T14:40:42.703 回答
0

正如@Steven 已经说过的那样,您可能无法更改 的输出opendir(),但是没有什么能阻止您事后对数组进行排序。

为此,请查看该natsort()函数,该函数旨在正确排序字符串,例如您用于文件名的字符串。

于 2013-10-09T14:41:09.170 回答