这篇文章主要介绍PHP数组合并方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!给大家分享三种php数组合并方法:array_merge、array_push和元素追加法,并比较一下它们的性能和内存消耗。在 P
这篇文章主要介绍PHP数组合并方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
给大家分享三种php数组合并方法:array_merge、array_push和元素追加法,并比较一下它们的性能和内存消耗。
在 PHP 中实现数组的合并,常用的方法有两种:
直接使用 array_merge ,这种方法虽然做到了代码的简洁,但却大大增加了内存的开销,同时拖慢了 PHP 的性能。
对数组进行遍历,将数组中的值逐个追加到结果数组中,相较直接使用 array_merge ,这种方法虽然增加了代码量,却降低了 PHP 的内存开销,同时提升了性能。
⒈ 代码实现
// 数组的长度$len = $argv[1];$start = 0;$arr = [];// 数组初始化while ($start < $len) { $arr[$start] = range(1, $len); $start ++;}// 采用 array_merge 的方式合并数组function merge1 (array $input){ $results = []; foreach ($input as $item) { $results = array_merge($results, $item); } return $results;}// 采用 array_push 的方式合并数组function merge2 (array $input) { $results = []; foreach ($input as $item) { foreach ($item as $v) { array_push($results, $v); } } return $results;}// 采用元素追加的方式合并数组function merge3(array $input){ $results = []; foreach ($input as $item) { foreach ($item as $v) { $results [] = $v; } } return $results;}echo microtime(), PHP_EOL;$res = merge3($arr);echo microtime(), PHP_EOL;echo memory_get_usage(), PHP_EOL;echo memory_get_peak_usage(), PHP_EOL;
⒉ 运行结果比较
数组长度 | array_merge | array_push | 元素追加 | |||
内存消耗(B) | 运行时间(㎲) | 内存消耗(B) | 运行时间(㎲) | 内存消耗(B) | 运行时间(㎲) | |
5 | 432,440 | 20 | 433,200 | 25 | 433,200 | 19 |
50 | 764,704 | 322 | 629,736 | 141 | 629,736 | 102 |
500 | 27,434,944 | 897,422 | 19,042,416 | 11,294 | 19,042,416 | 8,182 |
5,000 | 3,479,599,136 | 904,476,129 | 2,405,853,392 | 1,266,203 | 2,405,853,392 | 1,022,328 |
⒊ 原因分析
使用 array_merge
,每调用一次,都需要为 array_merge
的结果数组分配新的内存空间(PHP 采用的是写时复制的机制,而 array_merge
不会对参数进行写操作,所以每次调用时并不需要为入参重新分配内存)。随着数组长度的增加,调用 array_merge
的次数也会增加,重新分配内存的次数也会增加,同时结果数组的长度不断增加,每次所需要分配的内存空间也会随着增加,这就需要消耗大量的内存。同时,频繁的分配/销毁内存,导致 PHP 的性能下降。
使用 array_push
,只需要对结果数组分配一次内存,之后会一直往结果数组中追加元素。PHP 数组的底层实现方式为 hashtable
,并且在初始化时会为 hashtable
分配 8 个长度的 bucket
,每个 bucket
存储一个数组元素。当现有的 bucket
用完之后,如果还要继续往数组中追加元素,那么 PHP 会将现有的 bucket
数量翻倍,所以,使用 array_push
往结果数组中追加元素时,并不是每次操作都需要分配新的 bucket
,这样就减少了分配内存的次数,同时加快了程序运行时间,提升了 PHP 性能。
使用元素追加的方式,原理与 array_push
类似,唯一的区别在于使用 array_push
会有函数调用,而元素追加的方式不需要函数调用,这样程序运行会更轻量。
以上是“PHP数组合并方法有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!
--结束END--
本文标题: PHP数组合并方法有哪些
本文链接: https://www.lsjlt.com/news/297484.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0