Home > Blockchain >  Insert a string into a string at a specific point using PHP
Insert a string into a string at a specific point using PHP

Time:01-22

I'm wondering if there is a way to insert a string into another string at a specific point (in this case, near the end)? For example:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

//do something fancy here

echo $string1;

OUTPUT:
item one, item two, item three, AND item four

I need some help with the fancy string work part. Basically inserting the word after the last ", " if possible.

CodePudding user response:

Lots of ways to do this - but since you specifically stated "after the last ," then strrpos seemed appropriate:

// insert this line where you indicate 'do something fancy here'
$string1 = substr_replace($string1, " ".$string2, strrpos($string1,",") 1, 0);

Find the right-most comma and insert the $string2 (with a space prepended) one position after it. The last parameter indicates the length of the substring to replace so a 0 means "do not replace anything but only insert."

Note the extra space added to $string2. Obviously you could modify how $string2 is initialized to include the space and eliminate this part.

CodePudding user response:

You can use preg_replace for this, and I find it to be terser than other string manipulation methods and also more easily adaptable if your use case should change:

$string1 = "item one, item two, item three, item four";
$string2 = "AND";

$pattern = "/,(?!.*,)/";
$string1 = preg_replace($pattern, ", $string2", $string1);

echo $string1;

Where you pass preg_replace a regex pattern, the replacement string, and the original string. Instead of modifying the original string, preg_replace returns a new string, so you will set $string1 equal to the output of preg_replace.

The pattern: You can use any delimiter to signal the beginning and end of the expression. Typically I see / used*, so the expression will be "/pattern/", and where the pattern exists of the comma and a negative lookahead (?!) to find the comma that isn't followed by another comma. It isn't necessary to explicitly declare $pattern. You can just use the expression directly in the preg_replace arguments, but sometimes it can be just a little easier (especially for complex patterns) to separate the pattern declaration from its use.

The replacement: preg_replace is going to replace the entire match, so you need to prepend your replacement text with the comma (that's getting replaced) and a space. Since variables wrapped in double quotes are evaluated in strings, you put $string2 inside the quotes**.

The target: you just put your original string here.

* I prefer to use ~ as my delimiter, since / starts to get cumbersome when you deal with urls, but you can use anything.

Here is a cheat sheet for regex patterns, but there are plenty of these floating around. Just google regex cheat sheet if you need one.

https://www.rexegg.com/regex-quickstart.html

Also, you can find plenty of online regex testers. Here is one that includes a quick reference and also lets you switch regex engines (there are a few, and some can be just a little bit different than others):

https://regex101.com/

** I prefer to also wrap the variable in curly braces to make it more explicit that I am inserting the value, but it's optional. That would look like ", {$string2}"

  •  Tags:  
  • Related