如何在具有指定键的元素之后在Laravel集合中插入元素?

时间:2016-05-29 02:21:45

标签: php laravel collections laravel-4

我希望在具有特定键的另一个元素之后插入一个元素到Laravel集合中。类似的东西:

$collection->get(5)->insertAfter($someElement)

顺序很重要,因为我将在视图中稍后使用它来输出HTML。我查看了API并且找不到合适的方法。我所做的基本上是一个评论系统,我正试图在其后添加回复其他评论的评论。

这可行吗?我使用的是Laravel 4.2。我也在考虑做很多拼接和合并,但这似乎是非常可怕的性能。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用->splice() 代码如下所示: $collection->splice(5, 0, [$someElement]);
它会将$someElement插入第6位。

Laravel 5.2版

如果您需要在id == 5元素后面插入元素,那么您必须搜索该元素,然后使用找到的索引插入新元素:

    $index = $collection->search(function ($item, $key) {
        return $item->id == 5;
    });
    $collection->splice($index, 0, [$someElement]);

Laravel 4.2版本

不幸的是,Laravel 4.2不接受搜索参数作为闭包,因此我们必须手动找到索引:

    $foundKey = null;
    foreach ($collection->all() as $key => $item) {
        if ($item->id == 5) {
            $foundKey = $key;
            break;
        }
    }
    if($foundKey !== null)
    {
        $collection->splice($index, 0, [$someElement]);
    }