首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >已排序对象数组,按php中的3个字母月顺序排序

已排序对象数组,按php中的3个字母月顺序排序
EN

Stack Overflow用户
提问于 2013-07-12 21:41:19
回答 2查看 698关注 0票数 1

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

代码语言:javascript
运行
复制
array(2) {
  [0]=>
   object(stdClass)#31 (1) {
           ["book_month"]=>
                     string(3) "Aug"
       }
    [1]=>
               object(stdClass)#32 (1) {
               ["book_month"]=>
                  string(3) "Jun"
    }
}

但我需要一个月的结果作为一个排序顺序,如1月2月3月4月.....

我期望得到以下结果

代码语言:javascript
运行
复制
 array(2) {
  [0]=>
   object(stdClass)#31 (1) {
           ["book_month"]=>
                     string(3) "Jun"
       }
    [1]=>
               object(stdClass)#32 (1) {
               ["book_month"]=>
                  string(3) "Aug"
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-07-12 21:44:32

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

代码语言:javascript
运行
复制
uasort($your_array,'cmp');

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

代码语言:javascript
运行
复制
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
    */
}

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

代码语言:javascript
运行
复制
$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
票数 2
EN

Stack Overflow用户

发布于 2013-07-12 22:07:15

为了扩展fvu的回答,下面是如何在php 5.3+中实现该解决方案

代码语言:javascript
运行
复制
$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);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17616322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档