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”的部分替换。我将继续玩它,但认为它可能有助于诊断。
答案 0 :(得分:0)
没有意识到str_replace会替换字符串中的所有匹配项。在循环的开始" klf1"正在被取代; " klf1," " klf10"和" klf12"结果都被破坏了。