我有一个像这样的值的变量:
$sentence = "When it comes time to renew your auto insurance policy, be aware of how your carrier handles renewals";
我的数组变量的值如下:
$searches = array('aware', 'aware of', 'be aware', 'be aware of');
$replaces = array('conscious', 'conscious of', 'remember', 'concentrate on');
我想找到'意识到',然后用'专心'代替。输出如下:
到了续订汽车保险政策的时候,请专注于运营商处理续订的方式
仅搜索“请注意”作为相关同义词替换而不是其他人。谢谢你的帮助。
好的,这里有新代码:
$searches = array('aware of', 'be aware of', 'be aware', 'aware');
$replaces = array('conscious of', 'concentrate on', 'remember', 'conscious');
这是一个动态数组($searches
),我希望你理解......我们知道要获得最好的同义词替换是使用''意识到'替换'专注于'。输出如下:
到了续订汽车保险政策的时候,请专注于运营商处理续订的方式
答案 0 :(得分:1)
我认为你的搜索& replace数组是静态的。
试试这个,
str_replace($searches[3],$replaces[3],$sentence)
另外,只需替换特定的“小心”,您可以通过以下方式完成:
str_replace("%be aware of%","concentrate on",$sentence)
答案 1 :(得分:1)
这里不需要正则表达式,
首先以某种方式对常量数组进行排序,使其首先找到最大匹配:
$searches = array('be aware of', 'aware of', 'be aware', 'aware');
$replaces = array('concentrate on', 'conscious of', 'remember', 'conscious');
然后使用str_replace
$newsentence=str_replace($searches,$replaces, $sentence);
答案 2 :(得分:1)
如果更改搜索顺序以使第一个元素与数组中的元素不匹配,则可以正常使用str_replace($searches, $replaces, $subject);
!
$searches = array('be aware of', 'be aware', 'aware of', 'aware');
$replaces = array('concentrate on', 'remember', 'conscious of', 'conscious');
如果字符串包含“要注意”,“请注意”将不匹配,并且“请注意”将。如果你有相反的顺序,“意识到”会匹配“意识到”这将是错误的。
答案 3 :(得分:0)
怎么样:
$sentence = "When it comes time to renew your auto insurance policy, be aware of how your carrier handles renewals";
$searches = array('aware', 'aware of', 'be aware', 'be aware of');
$replaces = array('conscious', 'conscious of', 'remember', 'concentrate on');
function cmp($a, $b) {
if (strpos($a, $b) !== false) return -1;
if (strpos($b, $a) !== false) return 1;
return 0;
}
uasort($searches, 'cmp');
$replaces_new = array();
$i=0;
foreach($searches as $k=>$v) {
$replaces_new[$i] = $replaces[$k];
$i++;
}
$res = str_replace($searches, $replaces_new, $sentence);
echo $res;
<强>输出:强>
When it comes time to renew your auto insurance policy, concentrate on how your carrier handles renewals