Laravel将randow行从集合插入到分割文本中

时间:2018-01-19 08:25:09

标签: php laravel

在我的文字中我有一些{{}},我想用收集的随机帖子替换它们,就像这段代码一样:

$latestHerbsInformation = \App\ContentCategories::find('14')->contents()->inRandomOrder()->get();

$split = explode('{{}}', $data->description);
foreach ($split as $sp) {
    $shuffled = $latestHerbsInformation->shuffle();
    $rand = $shuffled->take(1);
    echo $sp . $rand[0]->title;
}
我的代码$rand = $latestHerbsInformation->take(1);中的

foreach语句中始终返回相同的行,如何将其更改为随机

2 个答案:

答案 0 :(得分:1)

您可以将first()链接到shuffle以获取单个元素:

$rand = $latestHerbsInformation->shuffle()->first()

答案 1 :(得分:1)

当你shuffle()$ latestHerbsInformation它给出一个数组,因为它的内容是一个数组。所以你必须对它做第一个(),不给你一个集合。但要确保first()方法在take(1)方法之后。或者你可以通过limit(1)方法限制结果。所以你的代码应该是这样的:

$latestHerbsInformation = \App\ContentCategories::find('14')->contents()->inRandomOrder()->get();

$split = explode('{{}}', $data->description);
foreach ($split as $sp) {
    $rand = $latestHerbsInformation->shuffle()->take(1)->first();

    echo $sp . $rand->title;
}

这样你就不需要$ rand的密钥来访问它的属性了。

或者您可以使用limit()代替:

foreach ($split as $sp) {
    $rand = $latestHerbsInformation->shuffle()->limit(1)->first();

    echo $sp . $rand->title;
}