2014-01-20 63 views
0

這是排序前的 「月」 陣列:爲什麼我的數組排序不正確?

array(3) { [2011]=> array(3) { [12]=> string(2) "12" ["04"]=> string(2) "04" ["01"]=> string(2) "01" } [2013]=> array(1) { [10]=> string(2) "10" } [2010]=> array(1) { ["05"]=> string(2) "05" } } 

而這裏的分選後的 「月」 陣列:

array(3) { [2011]=> array(3) { [12]=> string(2) "12" ["04"]=> string(2) "04" ["01"]=> string(2) "01" } [2010]=> array(1) { ["05"]=> string(2) "05" } [2013]=> array(1) { [10]=> string(2) "10" } } 

這裏是我的代碼:

var_dump($months); 
    foreach($months as $year => $month_array) 
    { 
     arsort($months[$year]); 
    } 

    arsort($days); 
    arsort($months); 
    arsort($years); 
    var_dump($months); 

我希望它能以相反的順序生產年份(2013,2011,2010)

+2

使用** ksort()**爲翻領訂購** krsort()** – GOD

+0

什麼是保存的意義(12 => '12', '04'=> '04')?似乎你正在存儲不需要的數據。爲什麼不使用'('12','04',..)' - 意味着一個數字數組? – hek2mgl

+2

我很困惑你的代碼甚至試圖實現。有些上下文會很好。在你的'arsort()'函數之前和之後向我們展示'var_dump($ years)'。 – sjagr

回答

0

使用ksort按鍵排序數組。

$a = array(
     2001 => '2001', 
     2004 => '2004', 
     2009 => '2009', 
); 
ksort($a); 
print_r($a); 

output: 

Array ([2001] => 2001 [2004] => 2004 [2009] => 2009) 

使用krsort的翻領順序(這就是你需要)。

$a = array(
     2001 => '2001', 
     2004 => '2004', 
     2009 => '2009', 
); 
krsort($a); 
print_r($a); 

output: 

Array ([2009] => 2009 [2004] => 2004 [2001] => 2001) 
0

我認爲你是在錯誤的地方使用arsort應該是foreach

arsort($months); 

foreach($months as $key => $value) 
{ 
echo $key . '=>' .$value; 
} 
0

之外你應該DESC和鍵排序的數組。 使用

krsort($array); 

並開始使用php.net搜索。這是爲了避免浪費時間

0

要獲得以相反的順序來,你應該把數組鍵(在你的情況下,年)在一個單獨的陣列,最後反向排序起來很方便的事情:

$years = array_keys($months); // => array(2011, 2010, 2013) 
rsort($years); 
var_dump($years); // => array(2013, 2011, 2010) 

如果你想整個數組由年進行排序,儘量krsort

krsort($months); 
var_dump($months); // => array(2013 => array(...), 2011 => array(...), 2010 => array(...)); 

另見:

http://nl3.php.net/manual/en/function.rsort.php
http://nl3.php.net/manual/en/function.krsort.php

相關問題