读书人

再谈PHP中的str_repeat函数兑现

发布时间: 2012-11-09 10:18:48 作者: rapoo

再谈PHP中的str_repeat函数实现

前段时间讨论了在PHP中生成某多个某字符或字符串的字符串的问题,呵呵。这句话听起来太别扭了。举个例子就是,生成10个a的字符串就是aaaaaaaaaa。当然这里的a可以是ab或任何其他字符串。

?

在博客“生成固定长度的某字符的字符串 PHP”中描述了一共5中方法。也对这五种方法的效率进行了比对,其中以PHP中自带的str_repeat函数效率最优,这也在意料和情理之中。

方法4,5都是对PHP本身的函数进行了组配以实现相同的功能,虽然没有str_repeat优秀,但是其效率还是好过了方法1,和方法2.

?

方法1,2是用PHP语言自己实现的逻辑,通过字符串的迭代拼接实现的,效率当然不能和PHP中的builtin方法相提并论。

?

今天看到了PHP中的str_repeat函数的实现,仔细一看,原来和自己实现的方法1中的思路是“异曲同工”啊。那PHP中的str_repeat究竟是怎么做的呢?核心逻辑代码如下:

?

result[result_len] = '\0';

其实就是最后字符串中那个不需要的'a'替换为字符串的结束符'\0'。

?

这样str_repeat函数就完成了。

?

****************************************************************

此外:

博客“生成固定长度的某字符的字符串 PHP”中的方法1,虽然思想上和str_repeat一致,但是采用了字符串拼接方式,而且每次拼接都要产生新的字符串,对内存空间也是极大的浪费,如下示例:

?

如果要生成8个‘a’的字符串,首先会生成'aa',然后是‘aaaa’,然后是‘aaaaaaaa’。循环次数和str_repeat一致,但是中间生成了'aa','aaaa'两个无用字符串,而且,目标字符串越长,则垃圾越多。而且,循环中采用字符串拼接方式,效率也不高。

?

?

而str_repeat则没有多余的无用空间的分配和释放操作。

读书人网 >PHP

热点推荐