0

この質問が何度か聞かれたことは知っていますが、与えられた答えは私の状況を助けません。

基本的に月と年を表す単純な配列があります。配列の唯一の目的は、データベース内のイベントを追跡することであり、どの月と年が表されているかを知る必要があります。配列は基本的に次のとおりです。

$array[MONTH][YEAR] = 1; //just any value. Don't care about the value.

年が順番になるように配列を並べ替える必要がありますが、同じ年の月も並べ替える必要があります。以下の出力を参照してください...

$dates[10][2012] = 1;
$dates[1][2011] = 1;
$dates[12][2013] = 1;
$dates[4][2010] = 1;
$dates[6][2009] = 1;
$dates[7][2009] = 1;

この配列を並べ替えて、値が次のように返されるようにするにはどうすればよいですか。

Array
(
    [6] => Array
    (
        [2009] => 1
    )
    [7] => Array
    (
        [2009] => 1
    )
    [4] => Array
    (
        [2010] => 1
    )
    [1] => Array
    (
        [2011] => 1
    )
    [10] => Array
    (
        [2012] => 1
    )
    [12] => Array
    (
        [2013] => 1
    )
}

前もって感謝します!

4

1 に答える 1

5

uasortを使用してみてください。外側のキーではなく内側のキーでソートするカスタム関数を作成できます。

編集:

外側の月もソートしたい場合は、uksortを使用する必要があることがわかりました。これはうまくいくようです:

uksort($dates, function ($a, $b) use ($dates) {
  $year = key($dates[$a]) - key($dates[$b]);
  $month = $a - $b;
  return $year == 0 ? $month : $year;
});

編集:

Jonが上で提案したようにインデックスの順序を変更するだけなら、もっと簡単です:

$dates[2012][10] = 1;
$dates[2011][1] = 1;
$dates[2013][12] = 1;
$dates[2010][4] = 1;
$dates[2009][7] = 1;
$dates[2009][6] = 1;

ksort($dates);
array_walk($dates, ksort);

print_r($dates);
于 2012-08-15T03:21:35.313 に答える