PHP中如何区分使用array_merge、array_push与直接元素追加进行数组合并的效果?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1138个文字,预计阅读时间需要5分钟。
本篇文章向家长分享三种PHP数组合并方法:array_merge、array_push和元素追加法,并比较它们的性能和内存消耗。
在PHP中实现数组合并,常用的方法有两种:直接使用array_merge和元素追加法。
1. 使用array_merge
php$array1=array(color=> red, 2, 4);$array2=array(a, b, color=> green, shape=> trapezoid, 4);$result=array_merge($array1, $array2);print_r($result);
输出结果:Array( [color]=> red [0]=> 2 [1]=> 4 [a]=> a [b]=> b [shape]=> trapezoid [4]=> 4)
2. 使用元素追加法
php$array1=array(color=> red, 2, 4);$array2=array(a, b, color=> green, shape=> trapezoid, 4);foreach ($array2 as $value) { $array1[]=$value;}print_r($array1);
输出结果:Array( [color]=> red [0]=> 2 [1]=> 4 [a]=> a [b]=> b [color]=> green [shape]=> trapezoid [4]=> 4)
性能和内存消耗比较:
- array_merge方法在性能上略优于元素追加法,因为array_merge直接将数组合并,而元素追加法需要遍历整个数组进行追加。- 在内存消耗方面,两种方法差别不大,但array_merge方法可能稍微占优。
总结:在PHP中实现数组合并,建议使用array_merge方法,因为它在性能和内存消耗方面表现更优。
本篇文章给大家分享三种PHP数组合并方法:array_merge、array_push和元素追加法,并比较一下它们的性能和内存消耗。在 PHP 中实现数组的合并,常用的方法有两种:
- 直接使用 array_merge ,这种方法虽然做到了代码的简洁,但却大大增加了内存的开销,同时拖慢了 PHP 的性能。
- 对数组进行遍历,将数组中的值逐个追加到结果数组中,相较直接使用 array_merge ,这种方法虽然增加了代码量,却降低了 PHP 的内存开销,同时提升了性能。
⒈ 代码实现
/** 用 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_mergearray_push元素追加内存消耗(B)运行时间(㎲)内存消耗(B)运行时间(㎲)内存消耗(B)运行时间(㎲)5432,44020433,20025433,2001950764,704322629,736141629,73610250027,434,944897,42219,042,41611,29419,042,4168,1825,0003,479,599,136904,476,1292,405,853,3921,266,2032,405,853,3921,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会有函数调用,而元素追加的方式不需要函数调用,这样程序运行会更轻量。
本文共计1138个文字,预计阅读时间需要5分钟。
本篇文章向家长分享三种PHP数组合并方法:array_merge、array_push和元素追加法,并比较它们的性能和内存消耗。
在PHP中实现数组合并,常用的方法有两种:直接使用array_merge和元素追加法。
1. 使用array_merge
php$array1=array(color=> red, 2, 4);$array2=array(a, b, color=> green, shape=> trapezoid, 4);$result=array_merge($array1, $array2);print_r($result);
输出结果:Array( [color]=> red [0]=> 2 [1]=> 4 [a]=> a [b]=> b [shape]=> trapezoid [4]=> 4)
2. 使用元素追加法
php$array1=array(color=> red, 2, 4);$array2=array(a, b, color=> green, shape=> trapezoid, 4);foreach ($array2 as $value) { $array1[]=$value;}print_r($array1);
输出结果:Array( [color]=> red [0]=> 2 [1]=> 4 [a]=> a [b]=> b [color]=> green [shape]=> trapezoid [4]=> 4)
性能和内存消耗比较:
- array_merge方法在性能上略优于元素追加法,因为array_merge直接将数组合并,而元素追加法需要遍历整个数组进行追加。- 在内存消耗方面,两种方法差别不大,但array_merge方法可能稍微占优。
总结:在PHP中实现数组合并,建议使用array_merge方法,因为它在性能和内存消耗方面表现更优。
本篇文章给大家分享三种PHP数组合并方法:array_merge、array_push和元素追加法,并比较一下它们的性能和内存消耗。在 PHP 中实现数组的合并,常用的方法有两种:
- 直接使用 array_merge ,这种方法虽然做到了代码的简洁,但却大大增加了内存的开销,同时拖慢了 PHP 的性能。
- 对数组进行遍历,将数组中的值逐个追加到结果数组中,相较直接使用 array_merge ,这种方法虽然增加了代码量,却降低了 PHP 的内存开销,同时提升了性能。
⒈ 代码实现
/** 用 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_mergearray_push元素追加内存消耗(B)运行时间(㎲)内存消耗(B)运行时间(㎲)内存消耗(B)运行时间(㎲)5432,44020433,20025433,2001950764,704322629,736141629,73610250027,434,944897,42219,042,41611,29419,042,4168,1825,0003,479,599,136904,476,1292,405,853,3921,266,2032,405,853,3921,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会有函数调用,而元素追加的方式不需要函数调用,这样程序运行会更轻量。

