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

时间:2014-05-19 18:09:41

标签: php

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++;
        }
    }

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

klf0 klf1 KLF2 klf3 ... klf19 klf20

上面的循环应该通过这个“klf”值列表并用其他东西替换它们。

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

就像我说的那样,代码可以正常工作到str_replace函数 - 在它产生正确的值(“klf10”)之前输出$ string并在str_replace显示正确值替换“klf”之前输出$ value n)“与。

关于它为什么这样做的任何想法?我尝试将整数部分转换为字符串但显然没有帮助。

编辑:我已经确认字符串实际上没有被截断,但“klf10”实际上被“klf1”的部分替换。我将继续玩它,但认为它可能有助于诊断。

1 个答案:

答案 0 :(得分:0)

没有意识到str_replace会替换字符串中的所有匹配项。在循环的开始" klf1"正在被取代; " klf1," " klf10"和" klf12"结果都被破坏了。