问题
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