【问题标题】:Sort array by month based on value根据值按月对数组进行排序
【发布时间】:2017-10-17 09:20:30
【问题描述】:

我有一个php数组如下-

$testar = array( 
 '3423sdfskjx' => 'January 2017',
 '1233sd3dkjx' => 'December 2017',
 '1534grfdbfd' => 'March 2017',  
 '5849dj4fodo' => 'April 2017',
 'ndj3058rjei' => 'February 2017',
 'lsdl39430xm' => 'September 2017',
 '059dmejri30' => 'July 2017',
 'mcjd923kd05' => 'November 2017',
 '3409sndfk3k' => 'May 2017',
 '094873uv3jj' => 'June 2017',
 '7859349cmei' => 'October 2017',
 '086u7n3if39' => 'August 2017');

主键是一个随机的 id 和代表某个月份值的值。我需要按值的字母顺序对其进行排序,以便重新组织数组,其中第一个键值为“2017 年 1 月”,第二个键值为“2017 年 2 月”,依此类推。 sort/rsort/asort/ksort 的标准使用不起作用。如何让这个数组根据数组元素值按月份排序?

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    您需要定义一个自定义函数来对数组进行排序

    function sortByDate($a, $b) {
         return strtotime($a) - strtotime($b);
    }
    
    usort($testar, 'sortByDate');
    

    我从这个one得到了答案

    【讨论】:

    • 原来我必须反其道而行之,并且我的月份值作为键存在。但是,使用您建议的相同解决方案,我只是使用了 uksort 而不是 usort 并且效果很好。谢谢!
    【解决方案2】:

    您说得对,asort 无法按时间顺序对这些月份进行排序,而是按字母顺序结束它们。如果您有能力,一种选择是操作数据以使用月份的数字表示而不是字符串,然后使用开箱即用的asort。或者,您可以编写自己的排序函数,将名称的字符串表示映射到数字表示并以这种方式对它们进行排序。

    【讨论】: