PHP有没有原生的多维多类型排序?
Is there a native multi-dimensional, multi-type sort in PHP?
我正在努力对 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() can be used to sort several arrays at once, or a
multi-dimensional array by one or more dimensions.
这基本上就是您对数组的不同维度进行排序的方式:
$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);
多重排序接受可变参数。阅读更多 here,请向下滚动并阅读评论。
或者您可以遍历数组的数组并将它们一一排序。
foreach ($matrix as &$row) { sort($row); }
不过,我认为多排序的效果会好得多。
我正在努力对 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() can be used to sort several arrays at once, or a multi-dimensional array by one or more dimensions.
这基本上就是您对数组的不同维度进行排序的方式:
$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);
多重排序接受可变参数。阅读更多 here,请向下滚动并阅读评论。
或者您可以遍历数组的数组并将它们一一排序。
foreach ($matrix as &$row) { sort($row); }
不过,我认为多排序的效果会好得多。