按字母顺序分隔输出

时间:2010-01-19 16:56:39

标签: php file sorting

我有下面的代码输出目录中的文件名。当文件的第一个字母发生变化时(例如从A到B),我想用一个额外的行空格按字母顺序分隔文件名。有任何想法吗?谢谢。

            $dirs = scandir("Dir");
            foreach($dirs as $file)
            {
                    if (($file == '.')||($file == '..'))
                    {
                    }
                    elseif (is_dir($tdir.'/'.$file))
                    {
                            filesInDir($tdir.'/'.$file);
                    }
                    else
                    {
                            echo $file."<br>";
                    }
            }

3 个答案:

答案 0 :(得分:2)

您只需监控每个文件名的第一个字符即可。您可以使用数组语法访问字符串的单个字符,例如$string[0]作为第一个字符:

        $dirs = scandir("Dir");
        $char = null;
        foreach($dirs as $file)
        {
                if (($file == '.')||($file == '..'))
                {
                }
                elseif (is_dir($tdir.'/'.$file))
                {
                        filesInDir($tdir.'/'.$file);
                }
                else
                {
                        if ($file[0] != $char && $char !== null) echo "<br>";
                        echo $file."<br>";
                        $char = $file[0];
                }
        }

答案 1 :(得分:0)

您可以通过在循环结束时存储先前的文件名来解决此问题,然后使用strncasecmp将其第一个字符与当前文件的第一个字符进行比较。如果返回值!= 0,则字符不同;因此,添加了额外的BR标签。


            $dirs = scandir("Dir");
            foreach($dirs as $file)
            {
                    if (($file == '.')||($file == '..'))
                    {
                    }
                    elseif (is_dir($tdir.'/'.$file))
                    {
                            filesInDir($tdir.'/'.$file);
                    }
                    else
                    {
                            echo $file."<br>";
                            if (strncasecmp($file, $previousFile, 1)) echo "<br>";
                    }
                    $previousFile = $file;
            }

答案 2 :(得分:0)

有点黑客,但是如果你的on * nix:

ls -al |  awk '{print $9}'

将按字母顺序返回目录内容。