使用opendir()和amp;控制文件的顺序READDIR()

时间:2013-10-09 14:35:32

标签: php

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

我有幻灯片,我在控制图像顺序方面遇到了问题。我尝试更改名称并使用01.img02.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);
?>

3 个答案:

答案 0 :(得分:1)

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

http://us1.php.net/scandir

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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