Разделение вывода по строке в алфавитном порядке - PullRequest
1 голос
/ 19 января 2010

У меня есть код ниже, который выводит имена файлов в каталоге. Я хотел бы разделить имена файлов в алфавитном порядке дополнительным пробелом при изменении первой буквы файла (скажем, от 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 ]

2 голосов
/ 19 января 2010

Вы можете просто контролировать первый символ каждого имени файла.Вы можете получить доступ к отдельным символам строки, используя синтаксис массива, например $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];
                }
        }
0 голосов
/ 19 января 2010

Вид взлома, НО, если ваш * nix:

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

Вернет вам содержимое каталогов в алфавитном порядке.

0 голосов
/ 19 января 2010

Вы можете решить эту проблему, сохранив предыдущее имя файла в конце цикла, а затем сравните его первый символ с первым символом текущего файла, используя strncasecmp.Если возвращаемое значение! = 0, то символы отличаются;таким образом, добавляется дополнительный тег BR.

<code>
            $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;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...