【发布时间】:2012-01-16 20:25:41
【问题描述】:
我有一个这种形式的文件名数组:
“A - 1.2 - 平面图.PDF”
我需要先按开头的类别对数组进行排序,顺序如下:
1. Category: A
2. Category: ESC
3. Category: C
4. Category: M
5. Category: E
6. Category: P
然后我需要按类别后面的数字对数组进行排序。
这是一个要排序的数组的例子:
$arr[0] = "A - 1.0 - Title Page.PDF";
$arr[1] = "A - 2.2 - Enlarged Floor Plans";
$arr[2] = "A - 2.1.0 - Structural Details.PDF";
$arr[3] = "E - 1.0 - Electrical Title Page.PDF";
$arr[4] = "A - 1.2 - Floor Plan.PDF";
$arr[5] = "P - 1.0 - Plumbing Title Page.PDF";
$arr[6] = "A - 2.1.1 - Structural Details.PDF";
$arr[7] = "C - 1.0 - Civil Title Page.PDF";
$arr[8] = "M - 1.0 - Mechanical Title Page.PDF";
$arr[9] = "ESC - 1.0 - Erosion Control Plan.PDF";
理想情况下,这个数组会变成
$arr[0] = "A - 1.0 - Title Page.PDF";
$arr[1] = "A - 1.2 - Floor Plan.PDF";
$arr[2] = "A - 2.1.0 - Structural Details.PDF";
$arr[3] = "A - 2.1.1 - Structural Details.PDF";
$arr[4] = "A - 2.2 - Enlarged Floor Plans";
$arr[5] = "ESC - 1.0 - Erosion Control Plan.PDF";
$arr[6] = "C - 1.0 - Civil Title Page.PDF";
$arr[7] = "M - 1.0 - Mechanical Title Page.PDF";
$arr[8] = "E - 1.0 - Electrical Title Page.PDF";
$arr[9] = "P - 1.0 - Plumbing Title Page.PDF";
我有以下正则表达式用于对文件名进行适当的分组:
^([A-Z]+?) ?- ?([0-9]+)\.([0-9]+)(\.([0-9]+))?.*$
我希望数组按第 1 组排序,然后按第 2 组,然后按第 3 组。如果第 5 组存在,则按第 5 组排序。忽略第 4 组。
按字典顺序对类别进行排序可能更容易。如果是这样,那就没问题了;尽管最好按上述顺序对它们进行排序。
有没有办法用 PHP 做到这一点?
【问题讨论】:
-
排序后不应该是这个顺序:
A - 1.0, A - 1.2, A - 2.1.0, A - 2.1.1, A - 2.2, C - 1.0, E - 1.0, ESC - 1.0, M - 1.0, P - 1.0吗? -
@Lolo,不是吗?我将您的排序版本与我的进行了比较。我找不到区别。
-
你有:[...],ESC,C,M,E,[...] 我只是想知道为什么不:[...] C、E、ESC、M、[...]
-
@Lolo 类别是自定义顺序。这些是施工文件。土木工程中通常包含侵蚀控制计划,因为它们通常由同一家公司创建。
-
很公平。我对我的答案进行了更改。现在有完整的比较功能,可以按照您想要的方式对元素进行排序。
标签: php arrays regex sorting usort