-1

これは以前どこかで答えられたと思いますが、この正確なケースの答えは見つかりませんでした... usort関数を使用できることはわかっていますが、比較的単純ですが、必要なことを実行するためのロジックを理解できません。

私はそのように生成されている動的領域を持っています:

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

$details配列を最終的に年、次に月の降順で並べ替えたい

月の値は文字列(1月、2月、3月などで、数値ではありません)です。これが私の主な問題のようです(月の「文字列」を文字の順序ではなく実際の順序で並べ替える方法)

これが重複していることが判明した場合は、ごめんなさい。

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 に答える