我的阵列:
$MY_ARRAY =
Array
(
[0] => Array
(
[0] => 2861
[1] => Array
(
[start_month] => 6
[start_year] => 1970
[end_month] => 12
[end_year] => 1990
[experience_info] => "Practically a random string"
)
)
)
我想根据内心的内容对$MY_ARRAY
直接孩子进行排序,
理想情况下,按 start_year,start_month,end_year,end_month 的顺序排列。我想我可以用某种方式使用array_multisort()
,但我不知道怎么做。有谁知道如何处理这个?
感谢。
编辑:正如它出现的那样,解决方案很简单,我不知道的是,在回调比较功能的比较过程中你可以进入更深层的结构 - 所以如果你的比lvl-1索引更深的仍然总是相同的(我的情况)就是如何做到这一点:)
答案 0 :(得分:1)
为此,您可以使用uasort功能:
function compare_callback($arr1, $arr2) {
$start_year1 = $arr1[1]['start_year'];
$start_year2 = $arr2[1]['start_year'];
$start_month1 = $arr1[1]['start_month'];
$start_month2 = $arr2[1]['start_month'];
$end_year1 = $arr1[1]['end_year'];
$end_year2 = $arr2[1]['end_year'];
$end_month1 = $arr1[1]['end_month'];
$end_month2 = $arr2[1]['end_month'];
return ($start_year1 === $start_year2)
? (($start_month1 === $start_month2)
? (($end_year1 === $end_year2)
? (($end_month1 === $end_month2)
? 0
: (($end_month1 < $end_month2) ? -1 : 1))
: (($end_year1 < $end_year2) ? -1 : 1))
: ($start_month1 < $start_month2) ? -1 : 1)
: (($start_year1 < $start_year2) ? -1 : 1);
}
uasort($array, 'compare_callback');
答案 1 :(得分:1)
您可以使用PHP的usort功能并提供您自己的比较功能。像这样:
function cmp($a, $b)
{
if ($a[1]['start_year'] == $b[1]['start_year'])
{
// You can further do tests for start_month, etc in here if start_years are equal
return 0;
}
return ($a[1]['start_year'] > $b[1]['start_year']) ? 1 : -1;
}
usort($MY_ARRAY, "cmp");
上面将按start_year对数组进行排序。我还没有对代码进行测试,但它应该有效。
答案 2 :(得分:0)
执行以下操作:
$newArray = array();
foreach($MY_ARRAY as $value) {
$newArray[] = $value[1];
}
multi_sort($newArray, $MY_ARRAY);