この記事では、array_merge、array_push、要素追加メソッドという 3 つの PHP 配列マージ メソッドを紹介し、それらのパフォーマンスとメモリ消費量を比較します。
PHP で配列のマージを実装するには、一般的に使用される 2 つの方法があります:
##⒈ コードの実装#
/** 用 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_push | 要素の追加 | メモリ消費量(B) | ||||
メモリ消費量(B) | 実行時間(㎲) | メモリ消費量(B) | 実行時間(㎲) | ##5 | ||
20 | 433,200 | 25 | 433,200 | 19 | 50 | |
322 | 629,736 | 141 | 629,736 | 102 | 500 | |
897,422 | 19,042,41611,294 | 19,042,416 | 8,182 | 5,000 | 3,479,599,136 | |
2,405,853,392 | 1,266,203 | 2,405,853,392 | 1,022,328 |
array_merge
を使用する場合、呼び出されるたびに、array_merge はパラメーターを書き込まないため、呼び出されるたびに入力パラメーター用にメモリを再割り当てする必要はありません)。配列の長さが増加すると、
array_merge の呼び出し数も増加し、メモリの再割り当ての数も増加し、同時に結果の配列の長さも増加し続けます。 、毎回割り当てる必要があるメモリ空間も増加します。増加すると、多くのメモリを消費する必要があります。同時に、メモリの割り当て/破棄が頻繁に行われると、PHP のパフォーマンスが低下します。
array_push
hashtable には初期化中に 8 つの長さの
bucket が割り当てられ、各
bucket には配列が格納されます要素。既存の
bucket が使い果たされた場合、配列に要素を追加し続けると、PHP は既存の
bucket の数を 2 倍にするため、追加するときは
array_push を使用します。すべての操作で新しい
bucket を割り当てる必要があるわけではありません。これにより、メモリ割り当ての数が減り、プログラムの実行時間が短縮され、PHP のパフォーマンスが向上します。
要素を使用して追加する原理は、
array_push
推奨学習: 「
PHP ビデオ チュートリアル
以上がPHP 配列のマージ方法: array_merge VS array_push VS 要素の追加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。