str_replace()做错了替换

时间:2012-03-29 02:18:14

标签: php regex preg-replace

以下 str_replace()函数如何才能返回 biWeekly 而不是每隔一周

$payFrequency = "biweekly";
$postData['payFrequency'] = str_replace(array('weekly','biweekly','twicemonthly','monthly'),array('Weekly','Every Other Week','Twice a Month','Monthly'), $payFrequency, $cnt);
echo "$cnt {$postData['payFrequency']}\n"; // SHOWS 1 biWeekly 

4 个答案:

答案 0 :(得分:2)

您应该交换两个数组中的第一个和第二个项目。

$payFrequency = "biweekly";
$postData['payFrequency'] = str_replace(array('biweekly','weekly','twicemonthly','monthly'),array('Every Other Week','Weekly','Twice a Month','Monthly'), $payFrequency, $cnt);
echo "$cnt {$postData['payFrequency']}\n"; // SHOWS 1 biWeekly 

这会奏效。

答案 1 :(得分:2)

它将“每周一次”中的“每周”替换为“每周”,之后不再与“双周”相匹配。

答案 2 :(得分:1)

因为双周包含“每周”,这是你在数组中的第一个匹配

array('weekly','biweekly','twicemonthly','monthly')

因此它首先转换然后返回。

您可以更换替换顺序:

$payFrequency = "biweekly";

$postData['payFrequency'] = str_replace(
        array('biweekly','weekly','twicemonthly','monthly'), // biweekly then weekly
        array('Every Other Week','Weekly','Twice a Month','Monthly'), $payFrequency, $cnt
);

echo "$cnt {$postData['payFrequency']}\n";

答案 3 :(得分:0)

str_replace区分大小写,因此biweekly会被替换,但biWeekly则不会。如果您想要不区分大小写的替换,请使用str_ireplace