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 数组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 IDE Helper 安装

安装laravel-ide-helper

laravel安装插件laravel-ide-helper

laravel5.*添加ide_helper.php 助手

Laravel Vuejs 实战:开发知乎 (33)自定义helper方法

markdown Laravel IDE Helper