微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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); } 

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。