replace exact string in another string

I have array of vars

array(2) {  
  ["M"]=>
  string(3) "500"
  ["MA"]=>
  string(3) "200"
}

AND strings "1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"

And I need to replace M with value 500, and MA with value 200. When I use str_replace it works but only for M, because it still match with first var M

Thanks for help

>Solution :

You can sort your replace array by longest keyword first, so that it will be replaced first, and only later on replace shorter keys:

$strings = ["1000-M", "1000-MA", "1000+MA-M", "MA/2", "M*MA+100"];

$replace = ['M' => '500', 'MA' => '200'];

krsort($replace);

foreach ($strings as $str) {
    echo $str . ':' . str_replace(array_keys($replace), $replace, $str) . PHP_EOL;
}

// 1000-M => 1000-500
// 1000-MA => 1000-200
// 1000+MA-M => 1000+200-500
// MA/2 => 200/2
// M*MA+100 => 500*200+100

Example

Leave a Reply