我试图将集合集合连接到另一组集合。我在Laravel 5.5中看到它具有concat
功能,但出于兼容性原因,我必须使用直到Laravel 5.3。
我尝试了merge
函数,但它不是连接而是合并。
还有什么其他解决方法,或者如何在不更新整个Laravel软件包的情况下更新Laravel Collection?
答案 0 :(得分:3)
如果您愿意,可以通过"宏" s向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
已经有了这个宏功能一段时间了。
答案 1 :(得分:1)
好的,没关系,我正在使用下面的代码作为解决方法,
$first_collection->each(function($element) use (&$second_collection) {
$second_collection->push($element);
});
答案 2 :(得分:0)
merge
函数正是您所需要的。
如果给定项的键是数字,则值将附加到集合的末尾:
这正是您所需要的。
如果您不确定 items 键,您可以随时使用 ->values()
函数
所以最终的设计是:
use Illuminate\Support\Collection;
...
$payments = new Collection();
$payments = $payments
->merge($payments1->values())
->merge($payments2->values());