如何按特定月份键自定义排序数组

时间:2012-06-26 22:38:15

标签: php arrays date sorting multidimensional-array

我确信之前已经回答了这个问题,但我找不到这个确切案例的答案...... 我知道我可以使用usort函数,但无法弄清楚我想做什么的逻辑虽然它相对简单

我有一个生成动态区域:

$details[$pageYear][$pageMonth][] = array(
    "id" => $page['id'],
    "title" => $page['title']
);

我希望数组$details最终按年份递减,然后按月递减

月份值是字符串(1月,2月,3月等......而不是数字),这似乎是我的主要问题(如何按实际订单而不是字母顺序对月份'字符串'进行排序)

任何帮助将不胜感激 对不起,如果这是重复的

2 个答案:

答案 0 :(得分:3)

你可以使用这个回调吗?

<?php
function cmp_month_strings($a_string, $b_string)
{
   $a_value = strtotime("{$a_string} 2000");
   $b_value = strtotime("{$b_string} 2000");

    if($a_value == $b_value)
       return 0;
    else if($a_value < $b_value)
       return -1;
    else
       return 1;
}
?>

答案 1 :(得分:0)

要按键排序,您需要uksort 一些类似的方式:

uksort($details, function($a, $b) {
    return ($a < $b) ? -1 : 1;
});

foreach ($details as &$year) {
    uksort($year, function($a, $b) {
        $montha = (int) date('m', strtotime("{$a} 1 2000"));
        $monthb = (int) date('m', strtotime("{$b} 1 2000"));
        return ($montha < $monthb) ? -1 : 1;
    });
}