2011-09-24 134 views
4

我的问题是,如果在str_replace上使用数组比执行多次更快。我的问题只有两个替代。数组str_replace速度更快吗?

随着阵列

$phrase = "You should eat fruits, vegetables, and fiber every day."; 
$healthy = array("fruits", "vegetables"); 
$yummy = array("pizza", "beer"); 

$newphrase = str_replace($healthy, $yummy, $phrase); 

每个搜索词一旦

$phrase = "You should eat fruits, vegetables, and fiber every day."; 
$newphrase = str_replace("fruits", "pizza", $phrase); 

$newphrase = str_replace("vegetables", "beer", $phrase); 
+5

可能。但差别可能是无法估量的。 (在你的平台上测量一个特定的答案) –

+4

http://c2.com/cgi/wiki?PrematureOptimization – Amber

+3

最快的解决方案是简单地从代码开始:'$ phrase =“你应该吃披萨,啤酒和纤维每天。“;' –

回答

1

PHP Docsstr_replace:在这些例子

// Outputs F because A is replaced with B, then B is replaced with C, and so on... 
// Finally E is replaced with F, because of left to right replacements. 
$search = array('A', 'B', 'C', 'D', 'E'); 
$replace = array('B', 'C', 'D', 'E', 'F'); 
$subject = 'A'; 
echo str_replace($search, $replace, $subject); 

// Outputs: apearpearle pear 
// For the same reason mentioned above 
$letters = array('a', 'p'); 
$fruit = array('apple', 'pear'); 
$text = 'a p'; 
$output = str_replace($letters, $fruit, $text); 
echo $output; 

来看,PHP是每个$search阵列节点应用str_replace所以您的两个例子,与在性能方面却一定要使用搜索数组而替换更具可读性和未来教授性,因为您可以在将来轻松更改阵列。

+1

是的,如果你的数组不好,你可以在索引上给它一个耳光,使它成为一个好小男孩...... ;-) – 2011-09-24 05:47:51

0

我不知道,如果它的速度更快,但我倾向于做的阵列路线走,因为它更易于维护和可读性给我。 ..

$replace = array(); 
$replace['fruits']  = 'pizza'; 
$replace['vegetables'] = 'beer'; 

$new_str = str_replace(array_keys($replace), array_values($replace), $old_str); 

如果我不得不猜测我会说多次调用str_replace会很慢呃但我不确定str_replace的内部结构。有了这样的东西,我倾向于可读性/可维护性,因为优化的好处根本不存在,因为根据替换次数的不同,您可能只能获得大约0.0005秒的差异。

如果您真的想要找出时差,那么在没有建立休眠数据集的情况下,为了达到您可以看到实际时差与测试混淆中的异常之间的差距,几乎是不可能的。

使用这样的事情...

$start = microtime(true); 
// Your Code To Benchmark 
echo (microtime(true) - $start) . "Seconds" 

......将让你的时间的请求。

+0

秘密提示:'strtr($ old_str,$ replace)':) – NikiC

+0

不错,谢谢你的提示=) –

-1

尝试在每次不同的方法使用后,这一点,你很快就会看到是否有转速差:

echo microtime()