Reputation: 10071
Is there a function in PHP that takes in a string, a number (i
), and a character (x
), then replaces the character at position (i
) with (x
)?
If not, can somebody help me in implementing a function which can replace or insert a substring?
Upvotes: 33
Views: 76452
Reputation: 47971
substr_replace()
is capable of replacing n number of characters bytes starting from x offset (positive or negative) in a given string with another string and has an optional parameter for limiting the number of characters bytes consumed before injecting the replacement string.
Multibyte strings are fine to use, but the offset and length parameters will count each byte of the multibyte characters.
Examples: (Demo)
echo substr_replace('stack', 'i', 2, 1); // stick
echo substr_replace('stack', 'u', -3, 1); // stuck
echo substr_replace('stack', 'o', 1, 2); // sock
echo substr_replace('stack', 'ge', -2, 2); // stage
echo substr_replace('stack', 'bri', 0, 3); // brick
echo substr_replace('stack', 'hre', 1, -1); // shrek
echo substr_replace('stack', 'hre', -4, -1); // shrek
echo substr_replace('stack', 'y', 3, 0); // stayck ...consume no bytes
echo substr_replace('stack', 'y', 3); // stay ...consume remaining bytes
echo substr_replace('voilà', 'ci', -2); // voilci ...à has two bytes
echo substr_replace('voilà', 'ci', -3); // voici ...à has two bytes
echo substr_replace('sûreté', '', 4); // sûr ...û has two bytes
Upvotes: 0
Reputation: 47
implode(':', str_split('1300', 2));
returns:
13:00
Also very nice for some credit card numbers like Visa:
implode(' ', str_split('4900000000000000', 4));
returns:
4900 0000 0000 0000
str_split — Convert a string to an array
Upvotes: 0
Reputation: 254975
I amazed why no one remember about substr_replace()
substr_replace($str, $x, $i, 1);
Upvotes: 16
Reputation: 455192
$str = 'bar';
$str[1] = 'A';
echo $str; // prints bAr
or you could use the library function substr_replace
as:
$str = substr_replace($str,$char,$pos,1);
Upvotes: 68
Reputation: 91963
function replace_char($string, $position, $newchar) {
if(strlen($string) <= $position) {
return $string;
}
$string[$position] = $newchar;
return $string;
}
It's safe to treat strings as arrays in PHP, as long as you don't try to change chars after the end of the string. See the manual on strings:
Upvotes: 1
Reputation: 490373
Codaddict is correct, but if you wanted a function, you could try...
function updateChar($str, $char, $offset) {
if ( ! isset($str[$offset])) {
return FALSE;
}
$str[$offset] = $char;
return $str;
}
Upvotes: 4