如何通过索引将项目添加到 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 5 从集合中获取项目

如何将 Laravel 身份验证添加到已启动的 Laravel 项目中?

如何将 Artisan cli 添加到现有的 laravel 项目?

如何重新创建“索引超出数组范围”将项目添加到字典?

使用 NPM 将 Mmenu 添加到 Laravel

如何将挂载的文件夹链接到 Laravel 项目?