2 回答
TA贡献1811条经验 获得超5个赞
你的问题让我想知道有什么区别,并使用 77 个字符的长字符串数组运行了一些测试。
结果如下
康卡特
Start Memory Usage: 2097152 KB
Post Array Build Memory Usage: 6291456 KB
Concat without Quotes Time: 28.893930912018
Post Concat without Quotes Memory Usage: 6291456 KB
用引号连接
测试不断耗尽内存,即使在低循环量下也失败
内爆
Start Memory Usage: 2097152 KB
Post Array Build Memory Usage: 6291456 KB
Implode Time: 19.913722991943
Implode Memory Usage: 6291456 KB
测试方法
set_time_limit(180);
function convert_memory_usage($size) {
if($size < 1024){
return $size . " B";
}
else if(1048576)
{
return ($size / 1024) . " KB";
}else{
return ($size / 1048576) . " MB";
}
}
function implode_array($arr){
$str = implode("", $arr);
}
function concat_without_quotes($arr){
$str = "";
foreach($arr as $s){
$str .= $s;
}
}
function concat_with_quotes($arr){
$str = "";
foreach($arr as $s){
$str = "{$str}{$s}";
}
}
echo "Start Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";
$string = "01234567890123456789012345678901234567890123456789012345678901234567890123456";
$array = [];
for($x = 0; $x < 40000; $x++){
array_push($array, $string);
}
echo "Post Array Build Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";
$start = microtime(true);
for($x = 0; $x < 10000; $x++){
// Change method to loop here
implode_array($array);
}
// And Uncomment as required
//echo "Implode Time: " . (microtime(true) - $start) . "</br>";
//echo "Implode Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";
//echo "Concat with Quotes Time: " . (microtime(true) - $start) . "</br>";
//echo "Concat with Quotes Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";
//echo "Concat without Quotes Time: " . (microtime(true) - $start) . "</br>";
//echo "Concat without Quotes Memory Usage: " . convert_memory_usage(memory_get_usage(true)) . "<br/>";
总结 经过这些测试,您可以看到这implode似乎是加入大量strings.
用法 $long_string = implode("", $array_of_strings)
使用 PHP 7.3.4 版
TA贡献1831条经验 获得超9个赞
正如在此评论中提到的:https : //www.php.net/manual/en/language.operators.string.php#60035,通过将字符串放在双引号内来连接字符串更有效。因此,更有效的连接方式是:
$values_string = "{$values_string}{$values},";
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报