Php 数组中的多个排序
我有以下数组:Php 数组中的多个排序,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下数组: Array ( [0] => Array ( [note] => test [year] => 2011 [type] => football ) [1] => Array ( [note] => test1 [year] => 2010 [type] => basket ) [2] => Arr
Array
(
[0] => Array
(
[note] => test
[year] => 2011
[type] => football
)
[1] => Array
(
[note] => test1
[year] => 2010
[type] => basket
)
[2] => Array
(
[note] => test2
[year] => 2012
[type] => football
)
[3] => Array
(
[note] => test3
[year] => 2009
[type] => basket
)
[4] => Array
(
[note] => test4
[year] => 2010
[type] => football
)
)
我想首先根据另一个数组按类型对其进行排序:
例如:$sort=array('football','basket')代码>
然后一年一年
我该怎么做
谢谢
所需输出应为:
Array
(
[2] => Array
(
[note] => test2
[year] => 2012
[type] => football
)
[0] => Array
(
[note] => test
[year] => 2011
[type] => football
)
[4] => Array
(
[note] => test4
[year] => 2010
[type] => football
)
[1] => Array
(
[note] => test1
[year] => 2010
[type] => basket
)
[3] => Array
(
[note] => test3
[year] => 2009
[type] => basket
)
)
我不介意我们重置索引值
谢谢。使用
函数按类型($a,$b)
{
如果($a['type']=$b['type']){
返回0;
}
foreach(数组('football','basket')作为$type){
如果($a['type']=$type)返回-1;
如果($b['type']=$type)返回1;
}
返回0;
}
按年份划分的功能($a$b)
{
如果($a['year']=$b['year']){
返回0;
}
回报($a['year']<$b['year'])?-1:1;
}
usort($array,“byType”);
usort($array,“byYear”);
使用。假设您的数组是$arr
:
foreach($arr as $key=>$row) {
$type[$key] = $row['type'];
$year[$key] = $row['year'];
}
array_multisort($type, SORT_ASC, $year, SORT_ASC, $arr);
要使用指定类型顺序的附加数组,可以执行以下操作:
$sortBy = array('football','basket');
foreach($arr as $key=>$row) {
$type[$key] = array_search($row['type'],$sortBy);
$year[$key] = $row['year'];
}
array_multisort($type, SORT_ASC, $year, SORT_ASC, $arr);
示例链接:
需要一个在按原样运行时支持闭包的PHP版本
可以在排序本身之外定义辅助数组。如果您不支持闭包,那么可以将其直接放入排序例程中
$sortBy = array('football', 'basket');
排序程序
$sortBy = array('football', 'basket');
如果类型相同,则按年份排序,否则按$sortBy
数组中的类型排序
usort($a, function($a, $b) use ($sortBy) {
if ($a['type'] == $b['type']) {
return ($b['year'] - $a['year']);
}
$typeOrder = array_flip($sortBy);
return $typeOrder[$a['type']] - $typeOrder[$b['type']];
});
这不是工作伙伴。首先,因为我不能使用另一个数组按类型排序。第二,当第二次usort被执行时,所有的东西都会再次混合。请检查:和期望的结果。我希望仅当类型相同时才进行“按年排序”。@Adnan它不起作用,请更改数组,它目前靠“运气”起作用,不符合OP的要求。我如何使用它?我试过了,但似乎不起作用。谢谢您的帮助。@salamis Codepad是PHP5.2,已经6年了,不支持闭包。你使用什么版本的PHP?(你可以用)谢谢,伙计,看起来很管用。但是我怎样才能把$sortBy数组也包括进来呢?谢谢,伙计,它看起来像预期的那样工作。一个简短的问题。如果我们按另一个数组排序,为什么还要使用$type,SORT\u ASC
。@salamis在这两种情况下都按$type
数组排序。在第一种情况下,它是一个类型名(字符串)数组。在第二种情况下,它是$sortBy
中类型位置的数组(如果$sortBy
中不存在类型,则为整数或false)。谢谢,伙计!非常感谢你的描述性回答。这里是一个示例链接,供所有对未来感兴趣的人使用!