4

如此处给出str_replace() 计数参数应在某些替换完成时停止。对?

这是我的代码:

define("PLACEHOLDER", "INSERT INTO `listings` VALUES (NULL, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');".PHP_EOL);
$r = (4 - count($_POST['ad']));
print count($_POST['ad'])."\n";
print $r;
$pf_args = str_replace("'%s', ", "", PLACEHOLDER, $r);
print $pf_args;

现在,我仔细检查了$r = 1我的测试中的所有内容,并确定count($_POST['ad'])是 3。不过,str_replace 完全忽略了 count 参数并替换了所有出现的情况以给出:

INSERT INTO `listings` VALUES (NULL, '%s');

这让我发疯。看过这么多反 php 的演讲,这些古怪的行为让我觉得它们是 bug 或它所拥有的另一种奇怪的魔法。

4

2 回答 2

9

我相信 $count 用于检查执行了多少次替换(例如,如果您在使用 str_replace() 后打印 $count,您将得到 10)。

你可以通过使用 preg_replace() 和一点正则表达式来做你想做的事情。请参阅:如何使用 str_replace() 仅在 PHP 中删除文本一定次数?

于 2012-05-09T18:11:48.303 回答
1

count 参数不限制替换的数量,它只是让您查看进行了多少替换......

于 2012-05-09T18:12:01.970 回答