2017-10-17 109 views
0

我有一个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的标准用法不起作用。我如何根据数组元素值将这个数组按月排序?

回答

1

您需要定义一个自定义功能进行排序的阵列

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

usort($testar, 'sortByDate'); 

我都来源于此one

+1

的回答原来我必须做的其他方式,我的月值出现作为一个关键。但是,使用相同的解决方案,你建议我只是使用uksort而不是usort,它的工作完美。谢谢! – JUG

+0

很高兴你的问题解决了。 –

0

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