Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中连接字符串的有效方法_Php_String - Fatal编程技术网

PHP中连接字符串的有效方法

PHP中连接字符串的有效方法,php,string,Php,String,许多语言都有这样的类,它们使得串接字符串的速度更快。例如,在.Net中有StringBuilder,在Java中有StringBuffer。PHP中是否存在这样的类,允许将多个字符串有效地连接成单个字符串?或者,PHP是否有一些内置的功能,在默认情况下,如果我想创建一个100000个字符长的字符串,并通过每次添加一个字符来构建它,那么PHP是否有一些内置的功能可以使它变得高效?没有内置的功能 使用常规的=在PHP中没有这样的东西。 如果生成网页,请考虑使用ECHO输出每个变量,而不是将它们连接起

许多语言都有这样的类,它们使得串接字符串的速度更快。例如,在.Net中有StringBuilder,在Java中有StringBuffer。PHP中是否存在这样的类,允许将多个字符串有效地连接成单个字符串?或者,PHP是否有一些内置的功能,在默认情况下,如果我想创建一个100000个字符长的字符串,并通过每次添加一个字符来构建它,那么PHP是否有一些内置的功能可以使它变得高效?

没有内置的功能


使用常规的
=

在PHP中没有这样的东西。 如果生成网页,请考虑使用ECHO输出每个变量,而不是将它们连接起来。 使用输出缓冲区也可能有帮助。

使用(字符串必须在数组中)比使用
操作符快近3倍

编辑: 好吧,我赶时间。不管怎么说,也不总是这样。这种行为不是线性的

我运行了一些测试(100次迭代)


为什么?为什么我从未意识到
=
操作符的存在?我现在觉得自己像个白痴,因为回想起来这是很明显的。但如果这和大多数其他语言一样有效,那就太低效了。你是说绝对没有其他方法,还是我应该着手创建自己的类来更有效地连接字符串?@Kibbee:你怎么能创建自己的类来更有效地连接字符串?您想将片段存储为私有数组成员,然后按需进行
内爆
吗?它可以快一点,但我不确定这是一个可以显著改进任何东西的地方,就像在其他语言中实现它一样。基本上,您从一些固定大小的数组开始。保留最后一个字符所在位置的索引。当您想要连接另一个字符串时,只需将它们放在数组中已经存在的位置。当空间不足时,将创建一个新数组并将其大小加倍。这样,您就不会不断地创建新数组,并且每次要连接单个字符时都会重新压缩整个字符串。我不会立即将它们发送到输出。我想建立一个字符串,然后对其进行一些处理。输出缓冲区注释的意思是这样做的:
这实际上是一种非常好的技术,因为您可以离开php上下文并获得html语法高亮显示(如果在脚本元素中,则为javascript):
好主意,因为内爆()使用内部“智能字符串”功能,它使用可调的预分配缓冲区-while.=在每个串联上重新分配。
10.000 elements:

regular concat: 0.00069347143173218 sec
implode():      0.00050755023956299 sec (slightly faster)


100.000 elements: 

regular concat: 0.0088809585571289 sec
implode():      0.0054086112976074 sec (much faster)