php - 以日期格式为键对多维数组进行排序

标签 php mysql arrays

是否可以使用键的特殊日期格式对数组进行排序?

我正在从 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),但是这会按星期几的字母顺序对它们进行排序。

最佳答案

如果您对查询本身进行排序,那么您对项目进行分组的方式应该使它们按日期排序。

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);
});

关于php - 以日期格式为键对多维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51922194/

相关文章:

javascript - 在 React 中显示三个数组中的元素

我可以在不知道数组大小的情况下输入数组吗?存储未知输入大小的其他方法?(C)

带有数组的 Javascript 类无法获取长度

php - 如何为 CubeCart 设置模板?

MySQL - 表示一个数组

mysql - 在 mvc4 的主键中创建自定义序列号

php - 将过滤器从接受今天更改为同时接受昨天+今天

php - 带有 php 支付页面的 ssl

php - 为什么 php 脚本变慢了?

php - 登录 php 和 mysqli