Reputation: 101
I have the following string replacement problem and I am in quite a fix here
PFB the sample string
$string = 'The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.';
$patterns[0] = '/quick/';
$patterns[1] = '/quick/';
$patterns[2] = '/fox/';
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
echo preg_replace($patterns, $replacements, $string);
I need to replace 'quick' depending on the numbers i send
i.e if my input to a function is 56
, the quick
before 56
needs to be replaced with bear
and if my input to a function is 78
, the quick before 78
needs to be replaced with black
Can someone please help me with this?
Upvotes: 0
Views: 2919
Reputation:
You are doing it the wrong way. Instead depending on your function input you should use the correct find and replace values. Just create a map of find and replace values depending on your function input value. Like:
$map = array(
56 => array('patterns' => array(), 'replacements' => array()),
78 => array(...)
);
Upvotes: 0
Reputation: 1
Try this:
$searchArray = array("word1", "sound2", "etc3");
$replaceArray = array("word one", "sound two", "etc three");
$intoString = "Here is word1, as well sound2 and etc3";
//now let's replace
print str_replace($searchArray, $replaceArray, $intoString);
//it should print "Here is word one, as well sound two and etc three"
Upvotes: 0
Reputation: 23321
I think regular expressions will make this difficult but you should be able to do it using only strpos()
, substr()
and str_replace()
.
Use strpos
to find the location in the string of 56 and 78.
Then cut the string up into substrings at these points using substr
.
Now, replace 'quick' with the correct variable, depending on whether 56 or 78 was sent to the function and which substring you are dealing with.
Upvotes: 1
Reputation: 36866
Instead of working with preg_replace
, use substr_replace
to do your string replacement and strpos to find the start and end points within the string based on the parameters you pass. Your pattern is a simple string, so it doesn't require a regular expression, and substr_replace will allow you to specify a start and end point within the string to do replacements (which seems to be what you're looking for).
EDIT:
Based on your comment, it sounds like you have to do a lot of checking. I haven't tested this, so it may have a bug or two, but try a function like this:
function replace($number, $pattern, $replacement)
{
$input = "The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.";
$end_pos = strpos($input, $number);
$output = "";
if($end_pos !== false && substr_count($input, $pattern, 0, $end_pos))
{
$start_pos = strrpos(substr($input, 0, $end_pos), $pattern);
$output = substr_replace($input, $replacement, $start_pos, ($start_pos + strlen($pattern)));
}
return $output;
}
This function does the following:
$end_pos !== false
)substr_count($input, $pattern, 0, $end_pos)
)strrpos
function to get the position of the last occurrence of the pattern within the substringsubstr_replace
Upvotes: 0