PHP Sort Array, возвращенный с FTP-сервера - PullRequest
0 голосов
/ 09 июня 2019

У меня есть этот массив, возвращенный с моего домашнего FTP-сервера NAS:

$arr = array (
  0 => 'FOLDER./Vacation.Paris.2018.5Month-Kodak[town]',
  1 => './Vacation.Paris.2018.5Month-Kodak[town]/DESC.txt',
  2 => './Vacation.Paris.2018.5Month-Kodak[town]/NUMBERS_CONTACT.vbs',
  3 => './Vacation.Paris.2018.5Month-Kodak[town]/paris.vacation.2018.5month-kodak.mkv',
  4 => './Vacation.Paris.2018.5Month-Kodak[town]/paris.vacation.2018.5month-kodak.dbs',
  5 => 'FOLDER./Vacation.Dubai.2018-Kodak',
  6 => './Vacation.Dubai.2018-Kodak/DESC.txt',
  7 => './Vacation.Dubai.2018-Kodak/NUMBERS_CONTACT.vbs',
  8 => 'FOLDER./Vacation.Dubai.2018-Kodak/Familly',
  9 => './Vacation.Dubai.2018-Kodak/Subs/2_IMG00536.jpg',
  10 => './Vacation.Dubai.2018-Kodak/Subs/3_IMG00537.jpg',
  11 => './Vacation.Paris.2018.5Month-Kodak[town]/Vacation.Dubai.2018.Center-Kodak.mp4',
  12 => './Vacation.2019.5Month.Sweeden-Kodak.mp4',
);

Как вы видите, у меня есть много папок моего отпуска, и сейчас я пишу html / css / jquery фотоальбом, но мне нужночтобы получить первый в php правильном порядке, нужно вывести:

[0] => FOLDER./Vacation.Paris.2018.5Month-Kodak[town]
[1] => ./Vacation.Paris.2018.5Month-Kodak[town]/DESC.txt
[2] => ./Vacation.Paris.2018.5Month-Kodak[town]/NUMBERS_CONTACT.vbs
[3] => ./Vacation.Paris.2018.5Month-Kodak[town]/paris.vacation.2018.5month-kodak.mkv
[4] => ./Vacation.Paris.2018.5Month-Kodak[town]/paris.vacation.2018.5month-kodak.dbs
[5] => ./Vacation.Paris.2018.5Month-Kodak[town]/Vacation.Dubai.2018.Center-Kodak.mp4
[6] => FOLDER./Vacation.Dubai.2018-Kodak
[7] => ./Vacation.Dubai.2018-Kodak/DESC.txt
[8] => ./Vacation.Dubai.2018-Kodak/NUMBERS_CONTACT.vbs
[9] => FOLDER./Vacation.Dubai.2018-Kodak/Familly
[10] => ./Vacation.Dubai.2018-Kodak/Subs/2_IMG00536.jpg
[11] => ./Vacation.Dubai.2018-Kodak/Subs/3_IMG00537.jpg
[12] => ./Vacation.2019.5Month.Sweeden-Kodak.mp4

Это код, который пробовал член этого форума, но он работает некорректно:

https://3v4l.org/208ol

Так что, если вы могли бы помочь мне изменить вышеуказанный код, чтобы я мог получить желаемый результат.

Спасибо

1 Ответ

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

Используется usort для выполнения работы, и для получения порядка сортировки, необходимого вам после этого, нужно немного повозиться.

Первая часть извлекает год из строки - предполагается, что это будет что-то вроде xxxxx 2020 xxxxx, поэтому он использует второй элемент из регулярного выражения, использованного здесь. Затем он удалит FOLDER только с начала строки, чтобы гарантировать, что он не будет удален где-либо еще. Затем для получения правильного заказа используется год, за которым следует обработанная строка ...

usort($arr, function($a, $b) {
    $f = "FOLDER";
    if ( substr( $a, 0, strlen($f)) == $f ) {
        $a = substr( $a, strlen($f));
    }
    $y1 = preg_split("/\D+/", $a)[1];
    if ( substr( $b, 0, strlen($f)) == $f ) {
        $b = substr( $b, strlen($f));
    }
    $y2 = preg_split("/\D+/", $b)[1];
    return $y1.$a <=> $y2.$b;
});
print_r($arr);

Для сравнения используется оператор космического корабля, который используется только в PHP 7+.

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