【发布时间】:2021-02-18 10:53:01
【问题描述】:
我正在努力在 PHP 中对多维、多类型数组进行排序。
通常我只使用sort和rsort和ksort等。
这种情况似乎不需要任何更复杂的东西,但array_multisort 似乎不起作用(至少不是我使用它的方式)。
我的多维、多类型数组如下所示:
[
'Welsh_Harmony' => [
'Bread_Dip',
'Cloud_Patterns',
'Legendary_Sword',
'Legumes_In_The_Garden',
'Notice::Balloons',
'Notice::Corvid',
'Titanic',
'novemberMonth',
'Elephant_Graveyard'
],
'Oak' => [
'Keyboard'
]
]
array_multisort 给了我这个(只对了一半):
[
'Oak' => [
'Keyboard'
],
'Welsh_Harmony' => [
'Bread_Dip',
'Cloud_Patterns',
'Legendary_Sword',
'Legumes_In_The_Garden',
'Notice::Balloons',
'Notice::Corvid',
'Titanic',
'novemberMonth',
'Elephant_Graveyard'
]
]
而我试图产生的结果(注意'Elephant_Graveyard' 的位置)是:
[
'Oak' => [
'Keyboard'
],
'Welsh_Harmony' => [
'Bread_Dip',
'Cloud_Patterns',
'Elephant_Graveyard',
'Legendary_Sword',
'Legumes_In_The_Garden',
'Notice::Balloons',
'Notice::Corvid',
'Titanic',
'novemberMonth'
]
]
我尝试使用标志 SORT_STRING 和 SORT_ASC 提示 array_multisort 按字母顺序重新排序和重新索引二级数组,但这似乎也不起作用。
我很乐观,一定有一种方法可以在不编写自定义递归函数的情况下执行这种多维、多类型的排序。
【问题讨论】:
-
array_multisort不会对数组的所有级别进行排序。您想要的是使用foreach ($arr as &$a) sort($a);之类的方式对数组中的每个数组进行排序 -
试试看
usort函数 -
谢谢,@Zeusarm - 我确实看过
usort,但它需要一个自定义回调,我担心性能。 -
@Rounin 相信我它很快 :-) 你只是在比较 2 个元素。 PHP 自己完成的所有迭代。
-
usort对你没有任何帮助。您正在对数组['Oak' => ..., ...]进行排序,不是其中的每个值。usort也不会对内部值进行排序。你需要明确地这样做。
标签: php sorting multidimensional-array mixed