Laravel与preg_replace的内部链接

时间:2017-04-04 08:51:23

标签: laravel-5 laravel-4

我正在尝试使用Laravel内部链接,将使用数据库中的关键字重新定位。

public function getSingle($slug) {

    $post = Post::where('slug', '=', $slug)->first();

    $keyword = Keyword::all();
    $data = array();

    foreach($keyword as $word){
             $data = $word->keyword;
             $sentence = preg_replace('@(?<=\W|^)('.$data.')(?=\W|$)@i', '<a href="'.$word->url.'">$1</a>', $post->body);
    }


    return view('news.single')->withPost($post)->withSentence($sentence);
}

这段代码工作正常,但我对每个循环都有问题,因为它只显示了一个来自数据库的关键字。 我尝试添加数组变量,但它是一样的。所以我需要修复女巫显示多个关键字不仅一个。

1 个答案:

答案 0 :(得分:0)

这是因为,在每个循环中,您将句子重置为最后一个。试试这个

public function getSingle($slug) {

    $post = Post::where('slug', '=', $slug)->first();

    $keyword = Keyword::all();
    $data = array();
    $sentence = $post->body;

    foreach($keyword as $word){
             $data = $word->keyword;
             $sentence = preg_replace('@(?<=\W|^)('.$data.')(?=\W|$)@i', '<a href="'.$word->url.'">$1</a>', $sentence);
    }


    return view('news.single')->withPost($post)->withSentence($sentence);
}

因此,您将为每个关键字替换相同的句子并返回其更改版本。