首页 > 解决方案 > PHP 中有原生的多维、多类型排序吗?

问题描述

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

通常我只使用sortandrsort等等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_STRINGSORT_ASC提示array_multisort按字母顺序重新排序和重新索引二级数组,但这似乎也不起作用。

我很乐观,必须有一种方法来执行这种多维、多类型的排序,而无需编写自定义的递归函数。

标签: phpsortingmultidimensional-arraymixed

解决方案


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

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

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

多排序接受可变参数。在这里阅读更多内容,请向下滚动并阅读评论。


或者您可以遍历数组的数组并一一排序。

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

但是,我认为多排序会表现得更好。


推荐阅读