Here is my script
$searchArray = array(\"Coupon Codes\", \"Coupon Code\", \"Promo\", \"Promo Codes\");
$replaceArray = array(\"Promo Code\", \"Promo Codes\", \"
The reason for your unexpected result is that str_replace will first replace "Coupon Codes" with "Promo Code" and then it will later substitute "Promo" with "Coupons". To work around this, use the array form of strtr, which will process the longest strings first, but most importantly will not substitute into any previously substituted text. e.g.
$searchArray = array("Coupon Codes", "Coupon Code", "Promo", "Promo Codes");
$replaceArray = array("Promo Code", "Promo Codes", "Coupons", "Coupon Code");
$intoString = "Best Buy Coupon Codes";
// this doesn't work
echo str_replace($searchArray, $replaceArray, $intoString);
// this does
echo strtr($intoString, array_combine($searchArray, $replaceArray));
Output:
Best Buy Coupons Code
Best Buy Promo Code
As on: http://php.net/manual/en/function.str-replace.php
Because str_replace() replaces left to right, it might replace a previously inserted value when doing multiple replacements. See also the examples in this document.
So here's what happens:
Best Buy Coupon Codes -> Best Buy Promo Code (first pair) -> Best Buy Coupons Code (third pair)
Change $searchArray
(and $replaceArray
) it in a way that the next examples doesn't include previous ones in them (i.e. from shortest string to longest string)