为什么 str_replace 没有正确替换
Why str_replace is not replacing correctly
这是我的脚本
$searchArray = array("Coupon Codes", "Coupon Code", "Promo", "Promo Codes");
$replaceArray = array("Promo Code", "Promo Codes", "Coupons", "Coupon Code");
$intoString = "Best Buy Coupon Codes";
print str_replace($searchArray, $replaceArray, $intoString);
结果:百思买优惠券代码
预期输出:百思买促销代码
PHP 版本 5.6.36
截至:
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.
事情是这样的:
Best Buy 优惠券代码 -> Best Buy 促销代码(第一对) -> Best Buy 优惠券代码(第三对)
更改 $searchArray
(和 $replaceArray
),使下一个示例不包含之前的示例(即从最短字符串到最长字符串)
出现意外结果的原因是 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
,它将首先处理最长的字符串,但最重要的是不会替换到任何先前替换的文本中。例如
$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));
输出:
Best Buy Coupons Code
Best Buy Promo Code
这是我的脚本
$searchArray = array("Coupon Codes", "Coupon Code", "Promo", "Promo Codes");
$replaceArray = array("Promo Code", "Promo Codes", "Coupons", "Coupon Code");
$intoString = "Best Buy Coupon Codes";
print str_replace($searchArray, $replaceArray, $intoString);
结果:百思买优惠券代码
预期输出:百思买促销代码
PHP 版本 5.6.36
截至: 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.
事情是这样的:
Best Buy 优惠券代码 -> Best Buy 促销代码(第一对) -> Best Buy 优惠券代码(第三对)
更改 $searchArray
(和 $replaceArray
),使下一个示例不包含之前的示例(即从最短字符串到最长字符串)
出现意外结果的原因是 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
,它将首先处理最长的字符串,但最重要的是不会替换到任何先前替换的文本中。例如
$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));
输出:
Best Buy Coupons Code
Best Buy Promo Code