Reputation: 1049
I have a problem when replacing strings with preg_replace.
function addClass($search, $string) {
return preg_replace("/\b($search)\b/", "<div class=mark>$1</div>", $string);
}
$string = "We won again";
$result = addClass("We", $string);
output ---> <div class=mark>We</div> won again
I want to make $search
for multiple strings.
$string = "We won again";
$result = addClass(array("We", "again"), $string);
output ---> <div class=mark>We</div> won <div class=mark>again</div>
How can I create multiple searches, to put strings in an array?
Thanks in advance.
Upvotes: 0
Views: 2330
Reputation: 26153
You can use or
expresion in regex - (We|again)
function addClass($search, $string) {
return preg_replace("/\b(". implode('|', $search) . ")\b/", "<div class=mark>$1</div>", $string);
}
And, if you want to save the old syntax, make an array from a single string:
function addClass($search, $string) {
if(! is_array($search)) $search = array($search);
return preg_replace("/\b(". implode('|', $search) . ")\b/", "<div class=mark>$1</div>", $string);
}
Upvotes: 3
Reputation: 92894
The alternative solution using is_array
and array_map
functions:
function addClass($search, $string) {
$search = (is_array($search))? array_map(function($v) { return "/\b($v)\b/"; }, $search) : ["/\b($search)\b/"];
return preg_replace($search, "<div class=mark>$1</div>", $string);
}
Upvotes: 2