PHP处理巨大的字符串

时间:2011-05-24 08:31:17

标签: php c performance string preg-replace

我必须在我的incomming xml中用xmlns替换ns以修复SimpleXMLElements xpath()函数。大多数功能没有性能问题。但是随着字符串的增长,总是似乎是一个开销。

E.g。 {2}字符串上的preg_replace需要 50ms 进行处理,即使我将替换限制为1并且替换在最开始时完成。

如果我substr前几个字符并且只是替换那个部分,它会稍快一些。但不是我想要的。

是否有任何PHP方法在我的问题中表现更好?如果没有选项,可以使用简单的php扩展帮助,那就是替换=> C中的SimpleXMLElement?

4 个答案:

答案 0 :(得分:2)

如果您确切知道违规“x”,“m”和“l”的位置,您可以使用类似$xml[$x_pos] = ' '; $xml[$m_pos] = ' '; $xml[$l_pos] = ' '的内容将它们转换为空格。或者将它们转换为ns___(其中_ =空格)。

答案 1 :(得分:0)

在尝试执行此操作时,您总是会遇到开销 - 您正在处理char数组并尝试替换数组的多个匹配元素(即单词)。

50ms并不是一个很大的开销,除非(我怀疑)你试图在循环中这样做?

答案 2 :(得分:0)

对于像这样的事情,50毫秒对我来说听起来很合理。要求本身就是出了问题。

您使用正则表达式有什么特别的原因吗?为什么人们会继续跳到矫枉过正的正则表达式解决方案?

有一个名为str_replace的沼泽标准字符串替换函数可以在很短的时间内完成您想要的任务(尽管这是否适合您取决于您​​的搜索/替换的复杂程度)。 / p>

答案 3 :(得分:0)

从PHP源代码中,我们可以看到,例如:  http://svn.php.net/repository/php/php-src/branches/PHP_5_2/ext/standard/string.c

我没有看到,任何副本,但我不是C的专家。从另一方面,我们可以看到很多转换为字符串调用,在第一眼看到可以复制值。如果他们复制价值,那么我们就麻烦了。

只有遇到麻烦 尝试通过逐字符处理来创建一些str_replace轮。例如,我们有字符串$somestring = "somevalue"。在PHP中,我们可以通过索引echo $somestring{0}来处理它的字符,这将给我们“s”或echo $somestring{2},这将给我们“m”。我不确定这种方式,但如果官方的意见不使用引用,它们应该可以使用。