PHP 中是否有原生的多维、多类型排序?

问题描述

我正在努力在 PHP 中对多维、多类型数组进行排序。

通常我只使用 sortrsortksort

这种情况似乎不需要更复杂的东西,但 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','Elephant_Graveyard'
    ]
]

而我试图产生的结果(注意 'Elephant_Graveyard' 的位置)是:

[
    'Oak' => [
        'Keyboard'
    ],'Elephant_Graveyard','novemberMonth'
    ]
]

我尝试使用标志 SORT_STRINGSORT_ASC提示 array_multisort 按字母顺序重新排序和重新索引第二级数组,但这似乎也不起作用.

我很乐观,必须有一种方法可以在不编写自定义递归函数的情况下执行这种多维、多类型的排序。

解决方法

array_multisort() 可用于一次对多个数组进行排序,或者一个 一维或多维的多维数组。

这基本上就是您对数组的不同维度进行排序的方式:

$ar = array(
   array("10",11,100,"a"),array(   1,2,"2",3,1)
  );
array_multisort($ar[0],SORT_ASC,SORT_STRING,$ar[1],SORT_NUMERIC,SORT_DESC);

多排序接受可变参数。阅读更多here,请向下滚动并阅读评论。


或者你可以循环遍历数组的数组并一一排序。

foreach ($matrix as &$row) { sort($row); } 

不过,我认为多重排序会表现得更好。