From: "Thaddeus J. Quintin" <[EMAIL PROTECTED]>
> I'm looking to replace the 'nth' instance of an expression within a
string.
>
> Example (very simple)-
>
> $string="My mom can beat up your mom and your mom's dog";
> $pattern="mom";
> $replacement="dad";
>
> I want to be able to replace any particular instance of the pattern
> within that string. I was getting ready to do it in a very complex
> manner by finding all the matches, splitting on the pattern, and then
> breaking the string down and reassembling it in the proper order. It
> seems like there might be an easier way to perform this though.
>
> Anyone have any suggestions?
Probably lots of way to do this... here's my suggestion:
<?php
//Original String
$str = 'a b c d a b c d a b c d a b c d a b c d';
//Replacement String
$replacement_string = "ff";
//Instances of search string you want replaced
//i.e. 2nd and 4th instance is array(2,4)
$instance = array(2,4);
//Callback function that manages replacements
function callback($matches)
{
//Global and static variables. $match_count is
//static to keep track of what match were currently
//operating on
global $replacement_string;
global $instance;
static $match_count = 1;
//determine if current count is in $instance array.
//if it is, set return value to replacement string,
//otherwise return matched value unchanged
if(in_array($match_count,$instance))
{ $retval = $replacement_string; }
else
{ $retval = $matches[0]; }
//increment match count
$match_count++;
//return replacement string
return $retval;
}
//replace all 'a' characters with $replacement_str (simple example)
$new_str = preg_replace_callback('/a/','callback',$str);
echo $str . '<hr>' . $new_str;
?>
---John Holmes...
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php