You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP中如何将两个独立日期数组合并为单一数组?

如何合并两个日期数组为单一数组?

首先看你的需求:你有两个独立的日期数组:

Array ( [0] => 2020-11-21 [1] => 2020-11-22 [2] => 2020-11-23 )
Array ( [0] => 2020-10-11 [1] => 2020-10-12 [2] => 2020-10-13 [3] => 2020-10-14 [4] => 2020-10-15 )

想要合并成一个包含所有日期的单一数组,预期结果如下:

Array ( [0] => 2020-11-21 [1] => 2020-11-22 [2] => 2020-11-23 [3] => 2020-10-11 [4] => 2020-10-12 [5] => 2020-10-13 [6] => 2020-10-14 [7] => 2020-10-15 )

你尝试用array_merge但没得到预期结果,先帮你分析代码里的问题:

你的代码问题分析

你在代码里把生成的日期数组$arrayarray_push($a, $array)塞进了另一个数组$a里,这就导致$a变成了二维数组(比如[[第一个日期数组]])。另外,array_flatten不是PHP的原生函数——如果你没有自己实现这个函数,这行代码会直接报错;就算实现了,你当前的逻辑也绕了没必要的弯子,反而把简单的合并搞复杂了。

解决方案

根据你的场景,分两种情况处理:

情况1:已经有两个独立的数组变量

如果已经拿到了两个单独的日期数组(比如$array1$array2),直接用原生的array_merge就能搞定,不需要多余的逻辑:

$array1 = ['2020-11-21', '2020-11-22', '2020-11-23'];
$array2 = ['2020-10-11', '2020-10-12', '2020-10-13', '2020-10-14', '2020-10-15'];
$mergedArray = array_merge($array1, $array2);
print_r($mergedArray);

运行这段代码就能得到你想要的合并结果。

情况2:需要在现有方法中累积合并多个日期数组

如果你的方法是用来处理多个时间段、生成多个日期数组并合并,那调整你的代码逻辑,直接累积合并就行,不用把数组套娃:

public function method($format = 'Y-m-d') {
    $arrayObject = $this->context->value('event_date');
    $interval = new DateInterval('P1D');
    $realEnd = new DateTime($arrayObject['end']);
    $realEnd->add($interval);
    $period = new DatePeriod(new DateTime($arrayObject['start']), $interval, $realEnd);

    // 初始化最终结果数组
    $result = [];
    // 生成当前时间段的日期数组
    $currentDates = [];
    foreach($period as $date) {
        $currentDates[] = $date->format($format);
    }

    // 直接合并到结果数组
    $result = array_merge($result, $currentDates);

    // 如果还有第二个时间段需要处理,重复上述步骤再合并
    // 比如:
    // $anotherEvent = $this->context->value('another_event_date');
    // ...生成第二个时间段的$currentDates2...
    // $result = array_merge($result, $currentDates2);

    print_r($result);
    return $result;
}

如果你的场景是已经有一个包含多个子数组的二维数组(比如你的$a),可以用PHP的展开语法直接合并所有子数组:

// 假设$a是[[数组1], [数组2]]
$result = array_merge(...$a);

这行代码会把二维数组里的所有子数组直接合并成一个一维数组,非常简洁。

内容的提问来源于stack exchange,提问作者Naveen Nayak

火山引擎 最新活动