Php 如何在具有指定键的元素之后插入Laravel集合中的元素?
我希望将一个元素插入到一个Laravel集合中,紧跟在另一个具有特定键的元素之后。比如:Php 如何在具有指定键的元素之后插入Laravel集合中的元素?,php,laravel,collections,laravel-4,Php,Laravel,Collections,Laravel 4,我希望将一个元素插入到一个Laravel集合中,紧跟在另一个具有特定键的元素之后。比如: $collection->get(5)->insertAfter($someElement) 顺序很重要,因为稍后我将使用它在视图中输出HTML。我浏览了API,没有找到合适的方法。我所做的基本上是一个评论系统,我试图添加评论,这些评论是对其他评论的回复 这可行吗?我用的是Laravel4.2。我也在考虑做大量的拼接和合并,但从性能上看,这似乎是非常糟糕的 有什么建议吗?谢谢。您可以使用->splice()
$collection->get(5)->insertAfter($someElement)
顺序很重要,因为稍后我将使用它在视图中输出HTML。我浏览了API,没有找到合适的方法。我所做的基本上是一个评论系统,我试图添加评论,这些评论是对其他评论的回复
这可行吗?我用的是Laravel4.2。我也在考虑做大量的拼接和合并,但从性能上看,这似乎是非常糟糕的
有什么建议吗?谢谢。您可以使用->splice()
代码如下所示:
$collection->splice(5,0,[$someElement])代码>
它将在第6位插入$someElement
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]);
}
如果顺序对为什么不使用sortBy
方法很敏感,我会在comments表中添加parent\u id
,所以当用户对评论留下回复时,将其设置为第一条评论的子项,或者您可以查看此包:&Hmm,我尝试过这样做,但$index总是出现错误。即使我这样做了:`$index=$collection->search(函数($item,$key){returntrue;})`最后我做了一些其他的事情,在这里我对集合进行foreach,然后为每个元素生成一个HTML字符串,并将其附加到一个字符串变量。谢谢你的帮助。也许是因为我使用的是Laravel4.2,所以$collection->search()不起作用?@PhilYu unfotunaly我没有注意到你使用的是L4.2。是的,L4.2搜索的工作原理有点不同,它不接受闭包,只接受原始值,