ホームページ  >  記事  >  バックエンド開発  >  PHP 配列のマージ方法: array_merge VS array_push VS 要素の追加

PHP 配列のマージ方法: array_merge VS array_push VS 要素の追加

青灯夜游
青灯夜游転載
2021-07-07 19:13:133683ブラウズ

この記事では、array_merge、array_push、要素追加メソッドという 3 つの PHP 配列マージ メソッドを紹介し、それらのパフォーマンスとメモリ消費量を比較します。

PHP 配列のマージ方法: array_merge VS array_push VS 要素の追加

PHP で配列のマージを実装するには、一般的に使用される 2 つの方法があります:

  • array_merge を直接使用するこの方法ではコードが実行されます。シンプルですが、メモリのオーバーヘッドが大幅に増加し、PHP のパフォーマンスが低下します。
  • 配列を走査し、配列内の値を結果の配列に 1 つずつ追加します。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)実行時間(㎲)432,440764,70427,434,944 19,042,41611,29419,042,4168,1825,0003,479,599,136904,476,129 2,405,853,3921,266,2032,405,853,3921,022,328⒊ 原因分析
##5
20 433,200 25 433,200 19 50
322 629,736 141 629,736 102 500
897,422

array_merge

を使用する場合、呼び出されるたびに、
    array_mergeの結果配列に新しいメモリを割り当てる必要があります。
  • スペース (PHP はコピーオンライトメカニズムを使用しており、

    array_merge はパラメーターを書き込まないため、呼び出されるたびに入力パラメーター用にメモリを再割り当てする必要はありません)。配列の長さが増加すると、array_merge の呼び出し数も増加し、メモリの再割り当ての数も増加し、同時に結果の配列の長さも増加し続けます。 、毎回割り当てる必要があるメモリ空間も増加します。増加すると、多くのメモリを消費する必要があります。同時に、メモリの割り当て/破棄が頻繁に行われると、PHP のパフォーマンスが低下します。 array_push

    を使用すると、結果配列にメモリを 1 回割り当てるだけで、要素が結果配列に追加されます。 PHP 配列の基礎となる実装は
  • hashtable
  • であり、

    hashtable には初期化中に 8 つの長さの bucket が割り当てられ、各 bucket には配列が格納されます要素。既存の bucket が使い果たされた場合、配列に要素を追加し続けると、PHP は既存の bucket の数を 2 倍にするため、追加するときは array_push を使用します。すべての操作で新しい bucket を割り当てる必要があるわけではありません。これにより、メモリ割り当ての数が減り、プログラムの実行時間が短縮され、PHP のパフォーマンスが向上します。 要素を使用して追加する原理は、array_push

    と似ています。唯一の違いは、
  • array_push
  • を使用するときに関数呼び出しがあることです。このメソッドは関数呼び出しを必要としないため、プログラムはより軽量に実行されます。

    推奨学習: 「PHP ビデオ チュートリアル

以上がPHP 配列のマージ方法: array_merge VS array_push VS 要素の追加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。