Список сортировки массива PHP, возвращенный из массива FTP - PullRequest
0 голосов
/ 08 июня 2019

У меня есть файлы, возвращенные в массиве с моего ftp-сервера:

Array
(
    [0] => FOLDER./Images.Vacation.2018
    [1] => ./Images.Vacation.2018/Racoon001.jpg
    [2] => ./Images.Vacation.2018/Racoon002.txt
    [3] => ./Images.Vacation.2018/the.racoon.swimming.mp4
    [4] => ./Images.Vacation.2018/the.racoon.swimming.slv
    [5] => FOLDER./WestImages
    [6] => ./WestImages/Ramco.txt
    [7] => ./WestImages/Ramco.jpg
    [8] => FOLDER./WestImages/Subimages
    [9] => ./WestImages/Subimages/Image001.jpg
    [10] => ./WestImages/Subimages/Image002.jpg
    [11] => ./WestImages/West.Ramco.Swimming.mp4
)

Как вы можете видеть, SubImages возвращается до WestImages, и это неправильно ... поэтому я не могу показать правильные файлы в своей папкеиспользуя и

теги ... мне нужен массив, чтобы вернуть это:
Array
(
    [0] => FOLDER./Images.Vacation.2018
    [1] => ./Images.Vacation.2018/Racoon001.jpg
    [2] => ./Images.Vacation.2018/Racoon002.txt
    [3] => ./Images.Vacation.2018/the.racoon.swimming.mp4
    [4] => ./Images.Vacation.2018/the.racoon.swimming.slv
    [5] => FOLDER./WestImages
    [6] => ./WestImages/Ramco.txt
    [7] => ./WestImages/Ramco.jpg
    [8] => ./WestImages/West.Ramco.Swimming.mp4
    [9] => FOLDER./WestImages/Subimages
    [10] => ./WestImages/Subimages/Image001.jpg
    [11] => ./WestImages/Subimages/Image002.jpg
)

Это мой ftp-код, который читает файлы с сервера:

<code>/* contents - ftp function */
    function ftp_list_files_recursive($ftp_stream, $path){
        $lines = ftp_rawlist($ftp_stream, $path);

        $result = array();

        foreach ($lines as $line){
            $tokens = explode(" ", $line);
            $name = $tokens[count($tokens) - 1];
            $type = $tokens[0][0];
            $filepath = $path . "/" . $name;

            if ($type == 'd'){
                $result[] = 'FOLDER'.$filepath;
                $result = array_merge($result, ftp_list_files_recursive($ftp_stream, $filepath));
            } elseif ($type == '-'){
                $result[] = $filepath;
            }
        }
        return $result;
    }

    /* contents - ftp */
    $contents = ftp_list_files_recursive($conn_id, ".");

    echo '<pre>';
    print_r($contents);
    echo '
';

Я пытался использовать sort($contents);но это возвращает мне неправильную сортировку ... как переписать функцию, чтобы вернуть правильную сортировку, как указано выше?

Спасибо.

1 Ответ

1 голос
/ 08 июня 2019

Не очень хорошее решение, но вы можете использовать preg_grep, чтобы получить foldernames, затем зациклить их и выполнить grep файлы.

$folders = preg_grep("/^FOLDER.*/", $arr);

foreach($folders as $folder){
    $result[] = $folder;
    $result = array_merge($result, preg_grep("/^\." . str_replace(["FOLDER.", "/"], ["","\/"], $folder) . "\/[A-Za-z0-9\.]+$/", $arr));
}

var_dump($result);

https://3v4l.org/BthA0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...