在PHP中按照3个月的月份顺序排序的对象数组

时间:2013-07-12 13:41:19

标签: php codeigniter

我得到了一个对象数组的数据库数据

array(2) {
  [0]=>
   object(stdClass)#31 (1) {
           ["book_month"]=>
                     string(3) "Aug"
       }
    [1]=>
               object(stdClass)#32 (1) {
               ["book_month"]=>
                  string(3) "Jun"
    }
}

但我需要结果作为一个月的排序顺序,如jan feb mar apr .....

我希望得到以下结果

 array(2) {
  [0]=>
   object(stdClass)#31 (1) {
           ["book_month"]=>
                     string(3) "Jun"
       }
    [1]=>
               object(stdClass)#32 (1) {
               ["book_month"]=>
                  string(3) "Aug"
    }
}

2 个答案:

答案 0 :(得分:2)

uasortreference)和usortreference)允许您传递比较器函数,因此只需提供适当的比较器函数,按时间顺序排列月份缩写。对于像这样的电话

uasort($your_array,'cmp');

您必须编写一个适当的比较器函数,它将接收两个数组元素:

function cmp($a, $b) {
   /*
    * This function should return 
    * -1 if $a.bookmonth comes before $b.bookmonth
    *  1 if $a.bookmonth comes after $b.bookmonth
    *  0 if $a.bookmonth and $b.bookmonth are the same
    */
}

创建这样一个函数的一个相当简单的方法是通过使用其他一些数组魔术来减少与整数测试的比较:

$monthnames = array('Jan','Feb', 'Mar', 'Apr' ...)
...
$monthindex_a = array_search($a,$monthnames); // will return 0..11 
// which are a lot easier to compare later on

答案 1 :(得分:2)

要扩展fvu的答案,以下是如何在php 5.3 +

中实现该解决方案
$monthnames = array('Jan','Feb', 'Mar', 'Apr', 'May','Jun','Jul','Aug','Sep', 'Oct', 'Nov','Dec');
usort($array, function($a, $b) use ($monthnames) {
       return array_search($a->book_month, $monthnames) - array_search($b->book_month, $monthnames);
});