PHP str_replace错误

时间:2014-10-29 09:56:16

标签: php string str-replace

我正在运行简单的PHP代码

$myVariable = 1;
$myVariable2 = str_replace(array(1, 2, 3), array('do 25 lat', 'od 26 do 35 lat', 'pow. 35 r.z.'), $myVariable);
echo $myVariable2;

结果是:

  

做od 26做战俘。 35 r.z.5 lat5 lat

我检查了不同的PHP版本。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您正在成为文档中指定的 gotcha 的受害者 - 请查看str_replace documentation

上的“备注”
  

替换订单问题

     

因为str_replace()从左向右替换,所以在执行多次替换时,它可能会替换先前插入的值。另请参阅本文档中的示例。

基本上正在发生的是顺序替换,因为您将数组作为第二个参数传递:

  1. 1 替换为 do 25 lat
  2. 在该字符串中, 2 替换为 od 26 do 35 lat ,为您提供做od 26 do 35 lat5 lat
  3. 在该字符串中, 3 被替换为pow。 35 r.z。为您提供最终结果。

答案 1 :(得分:1)

这是因为str_replace数组对依次应用。

尝试strtr

$myVariable = 1;
$replacePairs = array(
    1 => "do 25 lat",
    2 => "od 26 do 35 lat",
    3 => "pow. 35 r.z."
);
$myVariable2 = strtr($myVariable,$replacePairs);
echo $myVariable2;

答案 2 :(得分:1)

这不是错误,这是str_replace的正常行为。会发生什么,函数会遍历您的search数组,每次发现时都会将其替换为相关的replace

因此:

(search and match 1) 1 -> "do 25 lat"
(search and match 2) "do 25 lat" -> "do od 26 do 35 lat5 lat"
(search and match 3) "do od 26 do 35 lat5 lat" -> "do od 26 do pow. 35 r.z.5 lat5 lat"