【问题标题】:concat collection in Laravel 5.3Laravel 5.3 中的 concat 集合
【发布时间】:2017-12-14 01:18:34
【问题描述】:

我正在尝试将一组集合连接到另一组集合。我在 Laravel 5.5 中看到它具有 concat 功能,但出于兼容性原因,我只能在 Laravel 5.3 之前使用。

我尝试了merge 函数,但它不是串联而是合并。

还有哪些其他解决方法,或者如何在不更新整个 Laravel 包的情况下更新 Laravel 集合?

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    如果您愿意,可以通过“宏”向Illuminate\Support\Collection 添加功能:

    \Illuminate\Support\Collection::macro('concat', function ($source) {
        $result = new static($this);
    
        foreach ($source as $item) {
            $result->push($item);
        }
    
        return $result;
    });
    
    $new = $someCollection->concat($otherOne);
    

    从 5.5 复制方法。

    如果有帮助,我有一篇关于 Laravel 中宏的简短博文:

    asklagbox blog - Laravel macros

    Laravel 5.5 Docs - Collections - Extending Collections 虽然这是来自 5.5 个文档,但 Collection 已经拥有此宏功能一段时间了。

    【讨论】:

    • @sulaiman 将宏示例更新为您从 5.5 开始需要的方法
    【解决方案2】:

    好吧,没关系,我正在使用下面的代码作为解决方法,

    $first_collection->each(function($element) use (&$second_collection) {
    
     $second_collection->push($element);
    
    });
    

    【讨论】:

      【解决方案3】:

      merge 函数正是您所需要的。

      The documenation

      如果给定项的键是数字,则值将附加到集合的末尾:

      这正是您所需要的。

      如果您不确定项目键,您可以随时使用->values()函数

      所以最终的设计是:

      use Illuminate\Support\Collection;
      ...
      $payments = new Collection();
      $payments = $payments
                  ->merge($payments1->values())
                  ->merge($payments2->values());
      

      【讨论】:

        猜你喜欢
        • 2017-03-17
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        • 2017-10-18
        • 2017-05-29
        • 1970-01-01
        相关资源
        最近更新 更多