ホームページ バックエンド開発 PHPチュートリアル PHP 配列のマージ方法: array_merge VS array_push VS 要素の追加

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

Jul 07, 2021 pm 07:13 PM
array_merge array_push php 配列のマージ

この記事では、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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles