【问题标题】:Sort and display directory list alphabetically PHP按字母顺序排序和显示目录列表 PHP
【发布时间】:2017-01-25 18:35:36
【问题描述】:

我想按字母顺序对文件进行排序,但我不知道该怎么做。我的意思是,我希望这些目录将是第一个按 ABC 顺序排列的目录,然后是按 ABC 顺序排列的文件。 我尝试了几个选项,但我无法做到这一点。 这是我的代码:

<?php

    $dirlist = getFileList("./members/files/");?>

    <table border="1">
        <thead>
            <tr>
                <th>Name</th>
                <th>Type</th>
                <th>Size</th>
                <th>Last Modified</th>
            </tr>
        </thead>
        <tbody>
            <?php
            // output file list as table rows
            foreach($dirlist as $file) {
                echo "<tr>\n";

                    $file['nams'] = basename($file['name']);
                    $file['nams2'] = pathinfo($file['nams'], PATHINFO_EXTENSION );
                    $file['nams'] = pathinfo($file['nams'], PATHINFO_FILENAME);

                    if($file['nams2'] != 'mp4' && $file['nams2'] != '')
                    {
                        echo "<td><a href=\"/members/get_file.php?name={$file['nams']}&ext={$file['nams2']}\">",basename($file['name']),"</a></td>\n";
                    } else if($file['nams2'] != '') {
                        echo "<td><a href=\"/video.php?name={$file['nams']}\">",basename($file['name']),"</a></td>\n";
                    } else {
                        echo "<td><a href=\"#\">",basename($file['name']),"</a></td>\n";
                    }

                    echo "<td>{$file['type']}</td>\n";
                    echo "<td>{$file['size']}</td>\n";
                    echo "<td>",date('Y-m-d H:i', $file['lastmod']),"</td>\n";

                echo "</tr>\n";
            }
            ?>
        </tbody>
    </table>

    <?php
    function getFileList($dir, $recurse=false, $depth=false)
    {
        $retval = array();

        // add trailing slash if missing
        if(substr($dir, -1) != "/") $dir .= "/";

        // open pointer to directory and read list of files
        $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
        while(false !== ($entry = $d->read())) {
            // skip hidden files
            if($entry[0] == ".") continue;
            if(is_dir("$dir$entry")) {
                $retval[] = array(
                    "name" => "$dir$entry/",
                    "type" => filetype("$dir$entry"),
                    "size" => 0,
                    "lastmod" => filemtime("$dir$entry")
                );
                if($recurse && is_readable("$dir$entry/")) {
                    if($depth === false) {
                        $retval = array_merge($retval, getFileList("$dir$entry/", true));
                    } elseif($depth > 0) {
                        $retval = array_merge($retval, getFileList("$dir$entry/", true, $depth-1));
                    }
                }
            } elseif(is_readable("$dir$entry")) {
                $retval[] = array(
                  "name" => "$dir$entry",
                  "type" => mime_content_type("$dir$entry"),
                  "size" => formatSizeUnits(filesize("$dir$entry")),
                  "lastmod" => filemtime("$dir$entry")
                );
            }
        }
        $d->close();

        return $retval;
    }

    function formatSizeUnits($bytes)
    {
        if ($bytes >= 1073741824)
        {
            $bytes = number_format($bytes / 1073741824, 2) . ' GB';
        }
        elseif ($bytes >= 1048576)
        {
            $bytes = number_format($bytes / 1048576, 2) . ' MB';
        }
        elseif ($bytes >= 1024)
        {
            $bytes = number_format($bytes / 1024, 2) . ' kB';
        }
        elseif ($bytes > 1)
        {
            $bytes = $bytes . ' bytes';
        }
        elseif ($bytes == 1)
        {
            $bytes = $bytes . ' byte';
        }
        else
        {
            $bytes = '0 bytes';
        }

        return $bytes;
    }
?>

【问题讨论】:

    标签: php file sorting directory


    【解决方案1】:

    您可以使用scandir 以数组的形式返回排序后的文件列表。

    示例:

    <?php
        $directory_list = scandir("./members/files/");
        print_r($directory_list);
    

    这将输出类似的目录列表:

    Array
    (
        [0] => .
        [1] => ..
        [2] => bar.php
        [3] => foo.txt
        [4] => somedir
        ...
    )
    

    您可以这样做以按降序对它们进行排序:

    print_r($directory_list, SCANDIR_SORT_DESCENDING);
    

    您可以在PHP documentation 中找到有关scandir 的更多信息。

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2012-12-11
      相关资源
      最近更新 更多