首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么str_replace没有正确地替换

为什么str_replace没有正确地替换
EN

Stack Overflow用户
提问于 2018-10-25 06:07:10
回答 2查看 839关注 0票数 1

这是我的剧本

代码语言:javascript
复制
$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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 06:22:00

您意想不到的结果是,str_replace将首先将“优惠券代码”替换为"Promo“,然后将"Promo”替换为“优惠券”。要解决这个问题,请使用strtr的数组形式,它将首先处理最长的字符串,但最重要的是不会替换成任何先前替换的文本。例如:

代码语言:javascript
复制
$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));

输出:

代码语言:javascript
复制
Best Buy Coupons Code
Best Buy Promo Code
票数 3
EN

Stack Overflow用户

发布于 2018-10-25 06:18:14

As:http://php.net/manual/en/function.str-replace.php

代码语言:javascript
复制
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.

下面是发生的事情:

最佳购买优惠券代码->百思买促销代码(第一对) ->百思买优惠券代码(第三对)

$searchArray (和$replaceArray)更改为下一个示例不包括前面的示例(即从最短字符串到最长字符串)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52982379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档