【问题标题】:How to insert element in Laravel collection after an element with a specified key?如何在具有指定键的元素之后在 Laravel 集合中插入元素?
【发布时间】:2016-09-27 02:18:58
【问题描述】:

我希望在另一个具有特定键的元素之后将一个元素插入 Laravel 集合。比如:

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

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

这可行吗?我正在使用 Laravel 4.2。我也在考虑做很多拼接和合并,但这似乎在性能方面真的很糟糕。

有什么建议吗?谢谢。

【问题讨论】:

  • 如果订单对你为什么不使用sortBy方法很敏感?
  • 我会在 cmets 表上添加 parent_id,因此当用户对评论进行回复时,将其设置为第一条评论的子项,或者您可以查看以下包:baum & laravel-nestedset

标签: php laravel collections laravel-4


【解决方案1】:

您可以使用->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]);
    }

【讨论】:

  • 嗯,我试过这样做,但 $index 总是出错。即使我这样做了:` $index = $collection->search(function ($item, $key) { return true; }); ` 我最终做了其他事情,我在集合中进行了遍历,然后为每个元素生成了一个 HTML 字符串,并将其附加到一个字符串变量中。不过感谢您的帮助。也许是因为我使用的是 Laravel 4.2,所以 $collection->search() 不起作用?
  • @PhilYu 不幸的是,我没有注意到您使用 L4.2。是的,L4.2 搜索有点不同,它不接受闭包,只接受原始值 L4.2 search, L5.2 search
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多