preg_replace with preg_quote except one column

我的梦境 提交于 2019-12-20 06:43:39

问题


I'm trying to make some tricks with preg_replace used with preg_quote.

I have an array of json data object and what I want to

Replace all values of keys except the value of one key

Below is the basic structure of the input array:

$posts = [{"title":"Test owy post avela","subtitle":"test subtitle",   
           "slug":"test owy-post-laravela-4", "created_at":"2014-11-02"}, 
          {...} ] 

and I need to replace all values of tes to <span>tes</span> except from slug key's value

below is the code where $posts is generated

$posts = Post::where('title', 'LIKE', '%'.$s.'%')->orWhere('content', 'LIKE', '%'.$s.'%')->get()->toArray();
foreach($posts as &$elm){
     $elm = array_map(function($i) use($s){
          return preg_replace("/(" . preg_quote($s) . ")/is", "<span style='background: #92CF18;'>$1</span>", $i);
     }, $elm);
}

回答1:


If you just want to apply the change for all rows other than “SLUG”, I think this is what you want:

$posts = Post::where('title', 'LIKE', '%'.$s.'%')->orWhere('content', 'LIKE', '%'.$s.'%')->get()->toArray();
foreach($posts as &$elm) {
    foreach ($elm as $key => $value)    {
        if ($key != 'SLUG') $elm[$key] = preg_replace("/(" . preg_quote($s) . ")/is", "<span style='background: #92CF18;'>$1</span>", $value);
    }
}



回答2:


@cragimc answer is completely correct, but you could use T-Regx library:

Pattern::prepare(["(", [$s], ")/is"])
    ->replace("<span style='background: #92CF18;'>$1</span>")
    ->all()
    ->with($value);


来源:https://stackoverflow.com/questions/27277466/preg-replace-with-preg-quote-except-one-column

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!