str_replace()正在进行错误的替换


str_replace() making wrong replacement

下面的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 

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

$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 

这是可行的。

它用"weekly"替换了"biweekly"中的"周",之后它就不再匹配"biweek"了。

因为每两周包含"weekly",这是数组中的第一个匹配项

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";

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