当前位置:  开发笔记 > 编程语言 > 正文

将两个字符串组合在一起的最佳方法是什么?

如何解决《将两个字符串组合在一起的最佳方法是什么?》经验,为你挑选了4个好方法。

我读了一些(我想在编码错误),将字符串加在一起好像它们是数字是不好的做法,因为像数字一样,字符串不能改变.因此,将它们一起添加会创建一个新字符串.所以,我想知道,在关注性能时,将两个字符串组合在一起的最佳方法是什么?

这四种中哪一种更好,还是有另一种方式更好?

//Note that normally at least one of these two strings is variable
$str1 = 'Hello ';
$str2 = 'World!'; 
$output1 = $str1.$str2; //This is said to be bad

$str1 = 'Hello ';
$output2 = $str1.'World!'; //Also bad

$str1 = 'Hello';
$str2 = 'World!';
$output3 = sprintf('%s %s', $str1, $str2); //Good?
//This last one is probaply more common as:
//$output = sprintf('%s %s', 'Hello', 'World!');

$str1 = 'Hello ';
$str2 = '{a}World!';
$output4 = str_replace('{a}', $str1, $str2);

它甚至重要吗?



1> Patrick Glan..:

字符串与点连接绝对是三种方法中最快的一种.无论你喜欢与否,你总是会创建一个新的字符串.最有可能的最快方式是:

$str1 = "Hello";
$str1 .= " World";

不要将它们放入双引号中,$result = "$str1$str2";因为这会为解析字符串中的符号产生额外的开销.

如果你打算将它用于带有echo的输出,那么使用echo的功能,你可以传递多个参数,因为这不会生成一个新的字符串:

$str1 = "Hello";
$str2 = " World";
echo $str1, $str2;

有关PHP如何处理插值字符串和字符串连接的更多信息,请查看Sarah Goleman的博客.



2> Ed S...:

您总是要创建一个新的字符串,将两个或多个字符串连接在一起.这不一定是"坏",但它可能在某些情况下具有性能影响(如紧密循环中的数千/数百万个连接).我不是一个PHP人,所以我不能给你任何关于连接字符串的不同方法的语义的建议,但对于单个字符串连接(或只是一些),只是让它可读.你不会从低数量的人中看到性能受到打击.



3> Aleksandr Ma..:

这是快速而肮脏的测试代码,用于理解性能瓶颈.

单个concat:

$iterations = 1000000;
$table = 'FOO';
$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = sprintf('DELETE FROM `%s` WHERE `ID` = ?', $table);
}
echo 'single sprintf,',(microtime(true) - $time)."\n";

$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = 'DELETE FROM `' . $table . '` WHERE `ID` = ?';
}
echo 'single concat,',(microtime(true) - $time)."\n";

$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = "DELETE FROM `$table` WHERE `ID` = ?";
}
echo 'single "$str",',(microtime(true) - $time)."\n";

我得到这些结果:

single sprintf,0.66322994232178
single concat,0.18625092506409 <-- winner
single "$str",0.19963216781616

许多联合会(10):

$iterations = 1000000;
$table = 'FOO';
$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = sprintf('DELETE FROM `%s`,`%s`,`%s`,`%s`,`%s`,`%s`,`%s`,`%s`,`%s`,`%s` WHERE `ID` = ?', $table, $table, $table, $table, $table, $table, $table, $table, $table, $table);
}
echo 'many sprintf,',(microtime(true) - $time)."\n";

$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = 'DELETE FROM `' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '`,`' . $table . '` WHERE `ID` = ?';
}
echo 'many concat,',(microtime(true) - $time)."\n";

$time = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
        $sql = "DELETE FROM `$table`,`$table`,`$table`,`$table`,`$table`,`$table`,`$table`,`$table`,`$table`,`$table` WHERE `ID` = ?";
}
echo 'many "$str",',(microtime(true) - $time)."\n";

结果:

many sprintf,2.0778489112854
many concats,1.535336971283
many "$str",1.0247709751129 <-- winner

作为结论,很明显通过点(.)char的单个concat是最快的.对于案例,当你有很多concats时,表现最好的方法是通过"injection: $inject"语法使用直接字符串注入.



4> Toby Allen..:

除非真的有大量的文字,否则它确实无关紧要.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有