我必须在我的incomming xml中用xmlns
替换ns
以修复SimpleXMLElements xpath()函数。大多数功能没有性能问题。但是随着字符串的增长,总是似乎是一个开销。
E.g。 {2}字符串上的preg_replace
需要 50ms 进行处理,即使我将替换限制为1
并且替换在最开始时完成。
如果我substr
前几个字符并且只是替换那个部分,它会稍快一些。但不是我想要的。
是否有任何PHP方法在我的问题中表现更好?如果没有选项,可以使用简单的php扩展帮助,那就是替换=> C中的SimpleXMLElement?
答案 0 :(得分:2)
如果您确切知道违规“x”,“m”和“l”的位置,您可以使用类似$xml[$x_pos] = ' '; $xml[$m_pos] = ' '; $xml[$l_pos] = ' '
的内容将它们转换为空格。或者将它们转换为ns___
(其中_
=空格)。
答案 1 :(得分:0)
在尝试执行此操作时,您总是会遇到开销 - 您正在处理char数组并尝试替换数组的多个匹配元素(即单词)。
50ms并不是一个很大的开销,除非(我怀疑)你试图在循环中这样做?
答案 2 :(得分:0)
您使用正则表达式有什么特别的原因吗?为什么人们会继续跳到矫枉过正的正则表达式解决方案?
有一个名为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”。我不确定这种方式,但如果官方的意见不使用引用,它们应该可以使用。