Why str_replace is not replacing correctly

前端 未结 2 815
不知归路
不知归路 2021-01-24 00:29

Here is my script

$searchArray = array(\"Coupon Codes\", \"Coupon Code\", \"Promo\", \"Promo Codes\");

$replaceArray = array(\"Promo Code\", \"Promo Codes\", \"         


        
相关标签:
2条回答
  • 2021-01-24 00:58

    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
    
    0 讨论(0)
  • 2021-01-24 01:08

    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)

    0 讨论(0)
提交回复
热议问题