尝试str_replace一个连接的字符串+整数,得到不稳定的行为


Trying to str_replace a concatenated string + integer, getting erratic behavior

if (isset($values) && count($params) == count($values))
    {
        $counter = 0;
        $html = str_replace('mxyzptlk', 'value', $html);
        foreach ($values as $value)
        {
            $string = 'klf' . strval($counter);
            $html = str_replace($string, $value, $html);
            $counter++;
        }
    }

这是一段相当简单的代码。在程序的前面,我使用循环生成一个值列表,结果如下:

klf0klf1klf2klf3…klf19klf20

上面的循环应该遍历这个"klf"值列表,并将它们替换为其他值。

发生的奇怪的事情是整个页面工作正常,直到循环到达"klf10"及以上。然后发生的事情是字符串被截断,将"klf10"更改为"0",将"klf11"更改为"1",以此类推。两位数搞砸了。

就像我说的,代码工作得很好,直到str_replace函数——在str_replace显示正确的值之前输出$string ("klf10"),在str_replace显示正确的值之前输出$value ("klf (n)")

你知道为什么会这样吗?我尝试将整数部分转换为字符串,但显然没有帮助。

编辑:我已经确认字符串实际上并没有被截断,但"klf10"实际上部分被"klf1"的值所取代。我将继续使用它,但我认为它可能有助于诊断。

没有实现str_replace替换字符串中所有出现的字符。在循环开始时,"klf1"在每个实例中都被替换;"klf1","klf10"answers"klf12"都被打乱了。