【问题标题】:How can I add an item into a Laravel Eloquent Collection by index?如何通过索引将项目添加到 Laravel Eloquent 集合中?
【发布时间】:2015-02-28 05:53:30
【问题描述】:

我尝试了以下方法,但它不起作用。

$index = 2;
$collection->put($index, $item4);

例如,如果 $collection 看起来像这样:

$collection = [$item1, $item2, $item3];

我想结束:

$collection = [$item1, $item2, $item4, $item3];

【问题讨论】:

    标签: php laravel collections eloquent


    【解决方案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 是我们要从原始集合中提取(和移除)的元素数量。

    【讨论】:

    • “新项目被类型转换为数组,如果这不是我们想要的,我们应该将它包装在数组中,”我经历了对象到数组的转换并且正在摸不着头脑,感谢您的说明。跨度>
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2016-08-21
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    相关资源
    最近更新 更多