PHP substr_replace Function
The function substr_replace introduces some additional
functionality to compliment str_replace.
substr_replace
is a more mathematically based replace
function, which relies on starting points and lengths to replace
parts of strings, as opposed to searching and replacing.
substr_replace's Four Parameters
There are three required parameters for the substr_replace
function (original string, replacement string,
starting point
) and one that's optional (length).
-
original string - This is your original string
that will be operated on.
-
replacement string - This string will be used to
replace everything in the string from the starting point
to the ending point (specified by length).
-
starting point - This is the place in the
original string
that will be used to mark the
replacement's beginning. A negative value specifies the
number of characters from the end of the string.
-
optional length - How many characters from the
original string will be replaced. If no length is specified
then the end of the string is used. If a value of 0 is used
then no characters will be replaced and an insert is
performed. A negative value specifies the number of
characters from the end of the string.
substr_replace On Your Mark
This example of substr_replace shows what happens when
you omit the length parameter at various
starting
points
.
PHP Code:
//string that needs to be customized
$original = "ABC123 Hello Mr. Cow! DEF321";
//starting point 5
$sp5 = substr_replace($original, "Five", 5);
//starting point 12
$sp12 = substr_replace($original, "Twelve", 12);
//starting point 0
$sp0 = substr_replace($original, "Zero", 0);
//starting point -1
$spneg1 = substr_replace($original, "Negative 1", -1);
//Echo each string
echo "Original String: $original <br />";
echo "Starting Point 5: $sp5 <br />";
echo "Starting Point 12: $sp12 <br />";
echo "Starting Point 0: $sp0 <br />";
echo "Starting Point -1: $spneg1 ";
Display:
Original String: ABC123 Hello Mr. Cow! DEF321
Starting Point 5: ABC12Five
Starting Point 12: ABC123 HelloTwelve
Starting Point 0: Zero
Starting Point -1: ABC123 Hello Mr. Cow! DEF32Negative 1
As you can see, when you don't specify the fourth parameter,
length, everything after the starting point is replaced
by the second parameter replacement string.
Note: The first replacement occurred at position 5,
which in $original was the character 3. This 3 and
everything onward was replaced with the replacement string.
Remember that you start counting character to begin from zero.
The $original string could be labeled as so:
-
Letter A - Position 0
-
Letter B - Position 1
-
Letter C - Position 2
-
Letter 1 - Position 3
-
Letter 2 - Position 4
- Letter 3 - Position 5
substr_replace Specifying a Length
If you want to get any sort of precision out of this function
you're going to have to get into the nitty gritty of specifying
the exact length of characters you want replaced in your
original string.
Imagine that you want to get rid of those ugly pseudo
references (ABC123, DEF321) at the beginning and end of the
string. Since both of those strings are a length of 6 and we
know one is at the very beginning of the string and the other is
at the very end of the string we should probably use a starting
point of 0 for ABC123 and a value of -6 for DEF321. By having a
replacement string of nothing "" we can do something
similar to select and delete that we often do in a word
processor.
PHP Code:
//string that needs to be customized
$original = "ABC123 Hello Mr. Cow! DEF321";
//remove ABC123 and store in $cleanedstr
$cleanedstr = substr_replace($original, "", 0, 6);
//remove DEF321 from $cleanedstr
$cleanedstr2 = substr_replace($cleanedstr, "", -6, 6);
//Echo each string
echo "Original String: $original <br />";
echo "Clean #1: $cleanedstr <br />";
echo "Clean #2: $cleanedstr2";
Display:
Original String: ABC123 Hello Mr. Cow! DEF321
Clean #1: Hello Mr. Cow! DEF321
Clean #2: Hello Mr. Cow!
Make sure that you play around with this function some on
your own so you can get a feel for how the starting point
and length parameters effect this function.
substr_replace Perform an Insert
By setting the length parameter to zero you can stop
substr_replace from removing anything from the original
string and just add to it. If we wanted to add a second and
third person to our $original string we would want to do
this insert operation. Note: instead of counting the
characters we've used a couple other PHP functions to figure out
the starting positions for us.
PHP Code:
//string that needs to be customized
$original = "Hello Mr. Cow!";
// Get the position of Mr. Cow
$cowpos = strpos($original, "Mr. Cow");
// Find where Mr. Cow ends by adding the length of Mr. Cow
$cowpos_end = $cowpos + strlen("Mr. Cow");
// Insert Mrs. Bear after Mr. Cow
$mrsbear = substr_replace($original, " and Mrs. Bear", $cowpos_end, 0);
// Insert Sensei Shark before Mr. Cow
$senseishark = substr_replace($mrsbear, "Sensei Shark, ", $cowpos, 0);
//Echo each string
echo "Original String: $original <br />";
echo "After Mrs. Bear: $mrsbear <br />";
echo "After Sensei Shark: $senseishark";
Display:
Original String: Hello Mr. Cow!
After Mrs. Bear: Hello Mr. Cow and Mrs. Bear!
After Sensei Shark: Hello Sensei Shark, Mr. Cow and Mrs.
Bear!
We snuck a new function strlen into that example, but
it isn't that complicated of a function, as it stands for
"string length."
- $cowpos_end = $cowpos + strlen("Mr. Cow");
The strlen function takes a string and then counts up
how many characters are in it then returns that number. So by
calculating the length of "Mr. Cow" and adding that to the
position, we find out where the end point is!
|