0
点赞
收藏
分享

微信扫一扫

PHP中字符串拼接效率对比

程序猿不脱发2 2022-04-08 阅读 61
php

PHP中的字符串拼接非常简单直接, 最常用的方式是点 $a . $b,
当拼接复杂的字符串时, 常用 sprintf('%s%s', $a, $b) 函数, 他们两个效率如何, 做了如下实验
测试代码

$str = "I am a str";
$num = 12;
$float = 13.1;
$byte_arr = ['a', 'b', 'c',  'd', 'e', 'f', 'g', 'h', 'i', 'j'];
// 计算微秒时间
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

$start = microtime_float();
// 命令行输入normal时, 执行用点拼接
if ($argv[1] == 'normal') {
    for ($i = 0; $i < 10000000; $i++) {
        $tmp = $str . ($num + $i) . ($float + $i) . ($byte_arr[$i % 10]);
    }
}
// 命令行输入sprintf时, 用此函数拼接
if ($argv[1] == 'sprintf') {
    for ($i = 0; $i < 10000000; $i++) {
        $tmp = sprintf("%s%s%s%s",  $str,  ($num + $i),  ($float + $i), $byte_arr[$i % 10]);
    }
}



echo "time use: " . (microtime_float() - $start) . PHP_EOL;

上述测试用例, 分别拼接浮点数, 整数, 字符串, 字符这几个类型.
拼接次数为 1 千万次, 所拼接的数据是一样的, 唯一的变量就是拼接方式不同.
执行效果如下:

$ php test.php normal
time use: 2.8138599395752
$ php test.php normal
time use: 2.7641689777374
$ php test.php normal
time use: 2.7950520515442
$ php test.php normal
time use: 2.8259289264679
$ php test.php normal
time use: 2.8023228645325

$ php test.php sprintf
time use: 2.9651329517365
$ php test.php sprintf
time use: 2.9609770774841
$ php test.php sprintf
time use: 2.995875120163
$ php test.php sprintf
time use: 3.0061948299408
$ php test.php sprintf
time use: 2.933119058609

结果显然是直接用点拼接效率更高. 但是要注意, 这是在单次拼接1千万次的时候才出现性能的差异, 如果不是频繁的字符串拼接, 比如日常的格式化输出日志, 还是按照习惯使用即可.

另外, 附上我的测试环境

$ php --version
PHP 7.3.29 (cli) (built: Jul 13 2021 02:33:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.29, Copyright (c) 1998-2018 Zend Technologies

CPU: Intel(R) Xeon(R) CPU E5-1620 v4 @ 3.50GHz
OS:  Ubuntu 18.04.5 LTS
举报

相关推荐

0 条评论