当前位置: 首页> 最新文章列表> 用 array_chunk 将数组数据按每小时、每天等时间段拆分

用 array_chunk 将数组数据按每小时、每天等时间段拆分

M66 2025-04-26

在 PHP 中,array_chunk 函数可以将一个大的数组分割成多个小的数组。虽然 array_chunk 通常是按数组的固定长度来分组,但是在一些场景中,我们可能需要按时间段(如每小时、每天等)来对数组进行分组。本篇文章将介绍如何通过 array_chunk 来实现按时间段分组数组。

1. 什么是 array_chunk 函数?

array_chunk 是 PHP 中用于将一个大的数组分割成多个小数组的函数。它的基本语法如下:

array_chunk(array $array, int $size, bool $preserve_keys = false): array
  • $array:需要分割的数组。

  • $size:每个小数组的最大元素数量。

  • $preserve_keys:是否保留原数组的键名,默认是 false

2. 按时间段分组数组

假设我们有一个时间戳数组,需要按每小时或每天的时间段来分组。我们可以使用 array_chunk 来帮助我们实现这一目标。

按每小时分组

首先,我们可以创建一个时间戳数组,然后按小时将其分组。我们需要做的是将时间戳转换为小时,并将具有相同小时的时间戳归为一组。

// 模拟时间戳数组
$timestamps = [
    1617763200, // 2021-04-07 00:00:00
    1617766800, // 2021-04-07 01:00:00
    1617770400, // 2021-04-07 02:00:00
    1617802800, // 2021-04-07 06:00:00
    1617806400, // 2021-04-07 07:00:00
    1617810000, // 2021-04-07 08:00:00
    1617813600  // 2021-04-07 09:00:00
];

// 将时间戳按小时分组
$groupedByHour = [];
foreach ($timestamps as $timestamp) {
    $hour = date('Y-m-d H', $timestamp); // 按小时格式化时间戳
    $groupedByHour[$hour][] = $timestamp;
}

// 输出按小时分组的数组
print_r($groupedByHour);

以上代码将会根据每个时间戳的小时部分对时间戳进行分组,输出的数组会按照小时分组,例如:

Array
(
    [2021-04-07 00] => Array
        (
            [0] => 1617763200
        )

    [2021-04-07 01] => Array
        (
            [0] => 1617766800
        )

    [2021-04-07 02] => Array
        (
            [0] => 1617770400
        )

    [2021-04-07 06] => Array
        (
            [0] => 1617802800
        )

    [2021-04-07 07] => Array
        (
            [0] => 1617806400
        )

    [2021-04-07 08] => Array
        (
            [0] => 1617810000
        )

    [2021-04-07 09] => Array
        (
            [0] => 1617813600
        )
)

按每天分组

我们也可以按天将时间戳分组,这样每个分组会包含一天内的所有时间戳。

// 将时间戳按天分组
$groupedByDay = [];
foreach ($timestamps as $timestamp) {
    $day = date('Y-m-d', $timestamp); // 按天格式化时间戳
    $groupedByDay[$day][] = $timestamp;
}

// 输出按天分组的数组
print_r($groupedByDay);

输出的结果将会是按天分组:

Array
(
    [2021-04-07] => Array
        (
            [0] => 1617763200
            [1] => 1617766800
            [2] => 1617770400
            [3] => 1617802800
            [4] => 1617806400
            [5] => 1617810000
            [6] => 1617813600
        )
)

3. 总结

通过 array_chunk,我们可以轻松地将一个时间戳数组按时间段(如每小时、每天等)进行分组。虽然 array_chunk 通常用于按元素个数分组,但在这里,我们利用 date() 函数将时间戳格式化为我们需要的时间段,然后按这些时间段进行分组。