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)。谢谢,伙计!非常感谢你的描述性回答。这里是一个示例链接,供所有对未来感兴趣的人使用!