Laravel Helper 合并 Period 数组 [关闭]
Posted
技术标签:
【中文标题】Laravel Helper 合并 Period 数组 [关闭]【英文标题】:Laravel Helper to merge Period arrays [closed] 【发布时间】:2020-11-19 04:43:38 【问题描述】:Laravel 版本:7.0
我想知道如何创建这个助手。
输入是日期范围数组。例如:
$input1 = [2020-07-19, 2020-07-25];
$input2 = [2020-07-26, 2020-08-01];
$input3 = [2020-08-01, 2020-08-07];
$input4 = [2020-10-01, 2020-10-07];
$input5 = [2020-10-19, 2020-10-25];
我想做一个辅助函数。
function mergeDate($array)
...
所以当我使用这个助手时,我想得到以下结果。
$array = [$input1, $input2, $input3, $input4, $input5];
$mergedResult = mergeDate($array);
$mergedResult[0] = [2020-07-19, 2020-08-07];
$mergedResult[1] = [2020-10-01, 2020-10-07];
$mergedResult[2] = [2020-10-19, 2020-10-25];
谁能帮我实现mergeDate
的功能?
输入周期元素不重叠。
谢谢!
【问题讨论】:
数组已经排序了吗? 合并背后的逻辑是什么? @IslamElshobokshy 继续日期合并在一起。 @Aless55 不,数组未排序。只是没有重叠。 @IslamElshobokshy 逻辑是保存到数据库。foreach $mergedResult
然后将其保存到start_date, end_date
列。
【参考方案1】:
这将是我第一次猜测如何解决它。
public function merge($array)
$results = [];
foreach ($array as $element)
if (sizeof($results) == 0)
array_push($results,$element);
else
$found = null;
foreach ($results as $key => $r)
if (Carbon::parse($element[0])->equalTo(Carbon::parse($r[1])))
$found = $key;
break;
if (!is_null($found))
$results[$found][1] = $element[1];
else
array_push($results, $element);
return $results;
这是一个简单的问题。如果我们的结果数组为空,我们添加第一个元素,否则我们迭代结果以在结果数组中找到匹配的元素结束日期和项目的开始日期。如果我们找到匹配的开始结束对,我们将结果结束值替换为元素结束值。否则我们没有重叠,我们可以将它作为一个新项目添加到结果数组中。
一个有趣的库是 Spatie/Period 库。 https://github.com/spatie/period
@编辑 由于数组没有按照上面评论中的说明进行排序,因此您必须先对其进行排序。
【讨论】:
An interesting library to use would be the Spatie/Period library. https://github.com/spatie/period
这看起来不错。以上是关于Laravel Helper 合并 Period 数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章