我从家里的NAS FTP服务器返回了这个数组:
$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/Family',
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.Sweden-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/Family
[10] => ./Vacation.Dubai.2018-Kodak/Subs/2_IMG00536.jpg
[11] => ./Vacation.Dubai.2018-Kodak/Subs/3_IMG00537.jpg
[12] => ./Vacation.2019.5Month.Sweden-Kodak.mp4这是来自该论坛的成员尝试的代码,但它不能正常工作:
所以,如果你可以帮我修改上面的代码,以便我可以得到所需的输出。
谢谢
发布于 2019-06-10 02:24:58
这使用usort来完成这项工作,并且需要一些处理来获得您之后的排序顺序。
第一部分是从字符串中提取年份-假设它类似于xxxxx 2020 xxxxx,这就是为什么它使用这里使用的正则表达式中的第二个元素。然后,它将只从字符串的前面删除文件夹,以确保它不会从其他地方删除。然后,为了获得正确的顺序,它使用年份,后跟处理后的字符串...
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+。
https://stackoverflow.com/questions/56517098
复制相似问题