是否可以为键对具有特殊日期格式的数组进行排序?
我正在从MySql数据库中提取记录列表并投射数据
$sql = ' SELECT people.*
DATE_FORMAT(people.started_at, ' . $dateformat . ') AS start_date,
//etc.
这是日期格式,可以根据用户设置的参数进行更改:
$dateformat = "'%W, %b %d %y'";
一旦恢复记录集,就可以使用以下功能根据开始日期对它们进行组织和分组:
private function groupDataByKey ( $data, $key ) {
$groups = [];
foreach ($data as $item) {
$date = $item[ $key ];
if (!isset( $groups[ $date ] )) {
$groups[ $date ] = [];
}
array_push( $groups[ $date ], $item );
}
return $groups;
}
按开始日期对数组进行分组:
$groups = $this->groupDataByKey( $people, 'start_date' );
哪个给我这种格式:
["Sunday, Aug 05 18"]=>{//array data},
["Sunday, Jul 08 18"]=>{//array data},
["Friday, Aug 04 18"]=>{//array data},
["Monday, Jul 16 18"]=>{//array data}
//etc
哪个很棒,但是日期顺序不正确。
我之所以更详细地了解有关如何如何获取数据的原因,是为了让您了解在此过程中是否有要做我想做的事情。
是否可以根据日期键对数组进行排序?
我尝试了ksort($groups)
,但是按星期几的字母顺序排列。
答案 0 :(得分:1)
如果您对查询本身进行排序,那么对项目进行分组的方式应使它们按日期保持顺序。
SELECT people.*
DATE_FORMAT(people.started_at, ' . $dateformat . ') AS start_date
...
ORDER BY people.started_at;
否则,您可以使用uksort提供自己的功能来对组进行排序。
uksort($groups, function($a, $b) {
return strtotime($a) - strtotime(b);
});