2012-08-15 34 views
0

我知道這個問題已經被問了好幾次了,但是給出的答案並沒有幫助我的情況。如何按鍵排序php中的多維數組?

我有一個簡單的數組,基本上代表了月份和年份。該數組的唯一目的是跟蹤數據庫中的事件,並且我需要知道表示哪個月份和哪些年份。該陣列基本上是:

$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 
    ) 
} 

提前感謝!

+0

無論哪種方式,我該怎麼辦按年份排序,然後是月份? – pogeybait 2012-08-15 03:40:56

+0

我已在下面更新了我的答案,以顯示如果您更改索引順序如何對其進行排序。我認爲你已經被鎖定到了這個順序,但是如果你可以將它改爲'[YEAR] [MONTH]',那麼它確實簡單得多。 – DaoWen 2012-08-15 07:19:35

回答

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; 
}); 

編輯:

如果你只是更改索引順序一樣喬恩建議以上是簡單得多:

$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); 
+0

這實際上是'uksort'通過鍵排序 – Hameed 2012-08-15 03:30:59

+0

如果我能弄清楚如何在這個問題上使用這些排序功能,我會做出來的。有一個你正在談論哈米德的例子嗎? – pogeybait 2012-08-15 03:42:02

+0

@Hameed - 我在想,我們只需要對內部數組上的鍵進行排序,並可以忽略外部鍵。我編輯了我的答案,並用'uksort'代替了一個例子。 – DaoWen 2012-08-15 03:45:14