如何在PHP中sortingdate数组

我有这种格式的数组:

Array ( [0] => Array ( [28th February, 2009] => 'bla' ) [1] => Array ( [19th March, 2009] => 'bla' ) [2] => Array ( [5th April, 2009] => 'bla' ) [3] => Array ( [19th April, 2009] => 'bla' ) [4] => Array ( [2nd May, 2009] => 'bla' ) ) 

我想按照date的升序sorting(基于月份,date和年份)。 什么是最好的方式来做到这一点?

原来这些电子邮件正在以MySQLdate格式提取,所以我可能会得到这个状态的数组:

 Array [ ['2008-02-28']='some text', ['2008-03-06']='some text' ] 

也许在这种格式下,我可以遍历它们,删除所有'-' (连字符)标记,使它们保留为整数,使用array_sort()对它们进行sorting并循环遍历它们以对它们进行sorting? 宁愿如果有另一种方式,我会做每个用户3循环。

谢谢。

编辑:我也可以这样做:

 $array[$index]=array('human'=>'28 Feb, 2009', 'db'=>'20080228', 'description'=>'Some text here'); 

但是使用这个,是否有任何方法来基于单独的数据库元素sorting数组?

编辑2:更新了初始var_dump

使用ISO( yyyy-mm-dd )格式而不是“english”格式,然后使用ksort函数以正确的顺序获取它们。

不需要删除连字符, ksort会对string键进行字母数字比较,而yyyy-mm-dd格式完美地工作,因为词法顺序与实际的date顺序相同。

编辑我看你现在已经纠正了你的问题,以显示你实际上有一个数组的数组,并sorting键是在子数组中。 在这种情况下,您应该按照其他地方的build议使用uksort ,但我build议您根据数据库格式化的date进行自己的编辑和sorting,而不是通过parsing可读的格式:

 function cmp($a, $b) { global $array; return strcmp($array[$a]['db'], $array[$b]['db']); } uksort($array, 'cmp'); 

其实用这个:

 usort($array, "cmp"); function cmp($a, $b){ return strcmp($b['db'], $a['db']); } 

🙂

 function cmp($a, $b) { global $array; return strcmp($array[$a]['db'], $array[$b]['db']); } uksort($array, 'cmp'); 

我认为最好使用usort()函数而不是uksort() ,因为有时你uksort()不能使用全局variables,反正使用全局variables也不是好的做法。

你也可以使用匿名函数。

 // Sort in chronological order. usort($array, function($a, $b) { return strcmp($a['db'], $b['db']); });