【问题标题】:How to group array by DateTime in PHP?如何在 PHP 中按 DateTime 对数组进行分组?
【发布时间】:2015-10-12 19:08:51
【问题描述】:

我有 PHP 数组作为某个函数的日志,我正在为此准备日期明智的图表,

Array
(
    [0] => 03-08-15 12:07:16 PM
    [1] => 03-08-15 01:54:16 PM
    [2] => 03-08-15 02:18:35 PM
    [3] => 03-08-15 06:32:17 PM
    [4] => 04-08-15 11:40:25 AM
    [5] => 04-08-15 01:47:23 PM
    [6] => 04-08-15 02:13:31 PM
    [7] => 04-08-15 05:46:10 PM
    [8] => 05-08-15 11:36:20 AM
    [9] => 05-08-15 01:43:04 PM
    [10] => 05-08-15 02:25:14 PM
    [11] => 05-08-15 06:06:24 PM
    [12] => 06-08-15 11:25:31 AM
    [13] => 06-08-15 01:52:32 PM
    ... and so on
)

我想按日期重新排序,其中关键日期和值是内部数组,其中包含该特定日期的所有条目。

Array
(
     [03-08-15] => Array
                   (
                        [0] => 12:07:16 PM
                        [1] => 01:54:16 PM
                        [2] => 02:18:35 PM
                        [3] => 06:32:17 PM
                   )
     [04-08-15] => Array
                   (
                        [0] => 11:40:25 AM
                        [1] => 01:47:23 PM
                        [2] => 02:13:31 PM
                        [3] => 05:46:10 PM
                   )
     [05-08-15] => Array
                   (
                        [0] => 11:40:25 AM
                        [1] => 01:47:23 PM
                        .....
                   )
    and so on...
)

到目前为止,我已经尝试过

$tempArray = array();
foreach ($allEntries as $entry) {
    $date = new DateTime($entry);
    $tempArray[$date->format('m-d-y')] = $date->format('h:i:s A');
}
print_r($tempArray);

【问题讨论】:

  • 你能分享你试过的代码吗? @Shadab
  • 循环遍历数组,并将条目拆分为日期和时间。检查输出数组是否有日期条目,否则添加一个包含空数组的条目。然后将时间推到该子数组上。
  • @SubinThomas,现在检查。
  • 足够接近,$tempArray[$date->format('m-d-y')][]
  • @Federico $tempArray[$date->format('m-d-y')] = this part should be sub-array

标签: php arrays datetime


【解决方案1】:

到目前为止,我已经尝试过

够近了,你错过了[]

$dates = [
    '03-08-15 12:07:16 PM',
    '03-08-15 01:54:16 PM',
    '03-08-15 02:18:35 PM',
    '03-08-15 06:32:17 PM',
    '04-08-15 11:40:25 AM',
    '04-08-15 01:47:23 PM',
    '04-08-15 02:13:31 PM',
    '04-08-15 05:46:10 PM',
    '05-08-15 11:36:20 AM',
    '05-08-15 01:43:04 PM',
    '05-08-15 02:25:14 PM',
    '05-08-15 06:06:24 PM',
    '06-08-15 11:25:31 AM',
    '06-08-15 01:52:32 PM',
];

$newDates = [];
foreach ($dates as $date) {
    $dataTime = DateTime::createFromFormat('d-m-y H:i:s A', $date);
    $newDates[$dataTime->format('d-m-y')][] = $dataTime->format('H:i:s A');
}

var_dump($newDates);

Demo.

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2010-11-02
    • 2021-09-05
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多