我在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);
?>
答案 0 :(得分:1)
如果您使用的是PHP 5,则可以尝试使用scandir()。它有一个排序的论据。
array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )
答案 1 :(得分:1)
重写代码:
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()
函数,该函数旨在正确排序您用于文件名的字符串。