1

我得到了对象数组的数据库数据的结果

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"
    }
}
4

2 回答 2

2

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

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
于 2013-07-12T13:44:31.830 回答
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);
});
于 2013-07-12T14:07:15.100 回答