为什么我的数组不能正确排序?

时间:2014-01-20 14:33:35

标签: php

这是排序前的“月”数组:

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年)生成年份

4 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:0)

我认为你在错误的地方使用arsort它应该在foreach

之外
arsort($months);

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

答案 2 :(得分:0)

您应该通过DESC和Keys对数组进行排序。 使用

krsort($array);

开始使用php.net搜索。避免浪费时间是非常方便的事情

答案 3 :(得分: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