为了账号安全,请及时绑定邮箱和手机立即绑定

在PHP中使用opendir()按字母顺序排序和显示目录列表

在PHP中使用opendir()按字母顺序排序和显示目录列表

PHP
跃然一笑 2019-12-04 11:05:28
php noob在这里-我将这个脚本拼凑在一起,以显示带有opendir的文件夹中的图像列表,但是我无法弄清楚如何(或在哪里)按字母顺序对数组进行排序<?php// opens images folderif ($handle = opendir('Images')) {while (false !== ($file = readdir($handle))) {// strips files extensions  $crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    $newstring = str_replace($crap, " ", $file );   //asort($file, SORT_NUMERIC); - doesnt work :(// hides folders, writes out ul of images and thumbnails from two folders    if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {    echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\"  </a></li>\n";}}closedir($handle);}?>任何建议或指针将不胜感激!
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您需要先将文件读入数组,然后才能对它们进行排序。这个怎么样?


<?php

$dirFiles = array();

// opens images folder

if ($handle = opendir('Images')) {

    while (false !== ($file = readdir($handle))) {


        // strips files extensions      

        $crap   = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");    


        $newstring = str_replace($crap, " ", $file );   


        //asort($file, SORT_NUMERIC); - doesnt work :(


        // hides folders, writes out ul of images and thumbnails from two folders


        if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {

            $dirFiles[] = $file;

        }

    }

    closedir($handle);

}


sort($dirFiles);

foreach($dirFiles as $file)

{

    echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\"  </a></li>\n";

}


?>

编辑:这与您要的内容无关,但是您也可以使用pathinfo()函数对文件扩展名进行更通用的处理。然后,您不需要扩展的硬编码数组,就可以删除任何扩展。


查看完整回答
反对 回复 2019-12-04
?
富国沪深

TA贡献1790条经验 获得超9个赞

使用 opendir()

opendir()不允许对列表进行排序。您必须手动执行排序。为此,首先将所有文件名添加到数组中,然后使用进行排序sort():


$path = "/path/to/file";


if ($handle = opendir($path)) {

    $files = array();

    while ($files[] = readdir($dir));

    sort($files);

    closedir($handle);

}

并随后用一一列举foreach:


$blacklist = array('.','..','somedir','somefile.php');


foreach ($files as $file) {

    if (!in_array($file, $blacklist)) {

        echo "<li>$file</a>\n <ul class=\"sub\">";

    }

}

使用 scandir()

使用,这要容易得多scandir()。默认情况下,它将为您执行排序。使用以下代码可以实现相同的功能:


$path = "/path/to/file";

$blacklist = array('somedir','somefile.php');


// get everything except hidden files

$files = preg_grep('/^([^.])/', scandir($path)); 


foreach ($files as $file) {

    if (!in_array($file, $blacklist)) {

        echo "<li>$file</a>\n <ul class=\"sub\">";

    }

}

使用DirectoryIterator(首选)

$path = "/path/to/file";

$blacklist = array('somedir','somefile.php');


foreach (new DirectoryIterator($path) as $fileInfo) {

    if($fileInfo->isDot()) continue;

    $file =  $path.$fileInfo->getFilename();

    echo "<li>$file</a>\n <ul class=\"sub\">";

}


查看完整回答
反对 回复 2019-12-04
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

这就是我会做的方式


if(!($dp = opendir($def_dir))) die ("Cannot open Directory.");

while($file = readdir($dp))

{

    if($file != '.')

    {

        $uts=filemtime($file).md5($file);  

        $fole_array[$uts] .= $file;

    }

}

closedir($dp);

krsort($fole_array);


foreach ($fole_array as $key => $dir_name) {

  #echo "Key: $key; Value: $dir_name<br />\n";

}


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 714 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信