Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在具有指定键的元素之后插入Laravel集合中的元素?_Php_Laravel_Collections_Laravel 4 - Fatal编程技术网

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

Php 如何在具有指定键的元素之后插入Laravel集合中的元素?,php,laravel,collections,laravel-4,Php,Laravel,Collections,Laravel 4,我希望将一个元素插入到一个Laravel集合中,紧跟在另一个具有特定键的元素之后。比如: $collection->get(5)->insertAfter($someElement) 顺序很重要,因为稍后我将使用它在视图中输出HTML。我浏览了API,没有找到合适的方法。我所做的基本上是一个评论系统,我试图添加评论,这些评论是对其他评论的回复 这可行吗?我用的是Laravel4.2。我也在考虑做大量的拼接和合并,但从性能上看,这似乎是非常糟糕的 有什么建议吗?谢谢。您可以使用->splice()

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

$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搜索的工作原理有点不同,它不接受闭包,只接受原始值,