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但没得到预期结果,先帮你分析代码里的问题:
你的代码问题分析
你在代码里把生成的日期数组$array用array_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




