我尝试使用与preg_replace
一起使用preg_quote的一些技巧。
我有一个json数据对象数组和我想要的
替换除一个键值
之外的所有键值
以下是输入数组的基本结构:
$posts = [{"title":"Test owy post avela","subtitle":"test subtitle",
"slug":"test owy-post-laravela-4", "created_at":"2014-11-02"},
{...} ]
我需要将tes
的所有值替换为<span>tes</span>
,但slug
键的值除外
是生成$posts
的代码
$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);
}
答案 0 :(得分:1)
如果您只想对“SLUG”以外的所有行应用更改,我认为这就是您想要的:
$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);
}
}
答案 1 :(得分:0)
@cragimc的答案是完全正确的,但是您可以使用T-Regx library:
Pattern::prepare(["(", [$s], ")/is"])
->replace("<span style='background: #92CF18;'>$1</span>")
->all()
->with($value);