如何在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']); });