如何通过索引将项目添加到 Laravel Eloquent 集合中?
Posted
技术标签:
【中文标题】如何通过索引将项目添加到 Laravel Eloquent 集合中?【英文标题】:How can I add an item into a Laravel Eloquent Collection by index? 【发布时间】:2015-02-28 05:53:30 【问题描述】:我尝试了以下方法,但它不起作用。
$index = 2;
$collection->put($index, $item4);
例如,如果 $collection 看起来像这样:
$collection = [$item1, $item2, $item3];
我想结束:
$collection = [$item1, $item2, $item4, $item3];
【问题讨论】:
【参考方案1】:最简单的方法可能是拼接起来,像这样:
$collection->splice(2, 0, [$item4]);
集合通常支持与常规 php 数组相同的功能。在这种情况下,它是在幕后使用的 array_splice() 函数。
通过将第二个参数设置为 0,您实际上是在告诉 PHP “转到数组中的索引 2,然后删除 0 个元素,然后插入我刚刚提供给您的这个元素”。
【讨论】:
我遇到了一个错误。非静态方法 Illuminate\Support\Collection::splice() 不应被静态调用,假设 $this 来自不兼容的上下文 糟糕,我的错 - 应该是->
,而不是 ::
。我将更新我的示例。
也试过了。我越来越。 array_splice() 期望参数 2 很长,给定对象
对不起。过完年真的好累啊……我把辩论顺序搞砸了。请再看一遍,应该现在可以工作了。如果这不起作用,请将 $item4 放入一个数组中。
我花了很多时间才意识到 splice() 会修改集合本身,而不是返回一个新集合作为值。你知道有什么方法可以“拼接”它并返回新集合吗?【参考方案2】:
详细说明乔尔的回答:
splice
修改原始集合并返回提取的元素
新项目被类型转换为数组,如果这不是我们想要的,我们应该将它包装在数组中
然后在索引$index
处添加$item
:
$collection->splice($index, 0, [$item]);
或一般来说:
$elements = $collection->splice($index, $number, [$item1, $item2, ...]);
其中$number
是我们要从原始集合中提取(和移除)的元素数量。
【讨论】:
“新项目被类型转换为数组,如果这不是我们想要的,我们应该将它包装在数组中,”我经历了对象到数组的转换并且正在摸不着头脑,感谢您的说明。跨度>以上是关于如何通过索引将项目添加到 Laravel Eloquent 集合中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Laravel 身份验证添加到已启动的 Laravel 项目中?