【发布时间】:2017-12-14 01:18:34
【问题描述】:
我正在尝试将一组集合连接到另一组集合。我在 Laravel 5.5 中看到它具有 concat 功能,但出于兼容性原因,我只能在 Laravel 5.3 之前使用。
我尝试了merge 函数,但它不是串联而是合并。
还有哪些其他解决方法,或者如何在不更新整个 Laravel 包的情况下更新 Laravel 集合?
【问题讨论】:
我正在尝试将一组集合连接到另一组集合。我在 Laravel 5.5 中看到它具有 concat 功能,但出于兼容性原因,我只能在 Laravel 5.3 之前使用。
我尝试了merge 函数,但它不是串联而是合并。
还有哪些其他解决方法,或者如何在不更新整个 Laravel 包的情况下更新 Laravel 集合?
【问题讨论】:
如果您愿意,可以通过“宏”向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 已经拥有此宏功能一段时间了。
【讨论】:
好吧,没关系,我正在使用下面的代码作为解决方法,
$first_collection->each(function($element) use (&$second_collection) {
$second_collection->push($element);
});
【讨论】:
merge 函数正是您所需要的。
如果给定项的键是数字,则值将附加到集合的末尾:
这正是您所需要的。
如果您不确定项目键,您可以随时使用->values()函数
所以最终的设计是:
use Illuminate\Support\Collection;
...
$payments = new Collection();
$payments = $payments
->merge($payments1->values())
->merge($payments2->values());
【讨论】: