-1

我确信这已经在某个地方得到了回答,但我找不到这个确切情况的答案......我知道我可以使用 usort 函数,但无法弄清楚做我想做的事情的逻辑,尽管它相对简单

我有一个正在生成的动态区域:

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

我希望数组$details最终按年降序排序,然后按月排序

月份值是字符串(一月、二月、三月等......而不是数字),这似乎是我的主要问题(如何按实际顺序而不是字母顺序对月份的“字符串”进行排序)

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

4

2 回答 2

3

你可以使用 uasort 这个回调吗?

<?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;
}
?>
于 2012-06-26T22:44:59.920 回答
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;
    });
}
于 2012-06-26T23:09:12.093 回答