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



这是排序之前的"月"数组:

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)

使用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 )

我认为您在错误的地方使用Arsort,应该在foreach

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

您应该按desc和键对数组进行排序。使用

krsort($array);

并开始使用php.net搜索。避免浪费时间

是非常方便的事情

要以相反的顺序获取年份,您应该将数组键(在您的情况下)将其放在单独的数组中,最后将它们倒出:

$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

最新更新