パフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素
[]オペレーターは、PHPエンジンが直接処理する言語構成であるため、オーバーヘッドが低いため、単一エレメントの付録のarray_pushよりも速いです。 2。ARRAY_PUSHは、複数の要素を一度に追加するためにより実用的であり、複数の引数またはSPLAT演算子を使用するときにクリーンな構文を提供します。 3.フードの下で、array_pushは関数通話オーバーヘッド、引数検証を伴い、新しい配列の長さを返しますが、[]は返品値のオーバーヘッドなしで最適化されたオペコードに変換されます。 4.ベストプラクティスは、パフォーマンスと読みやすさを向上させるために、1つまたは少数の要素に[]を使用し、複数の値を持つバルク追加用のArray_Pushの予約、およびループでArray_Pushを回避することをお勧めします。完全な配列をマージするには、Array_MergeまたはSpread演算子が最新のPHPで推奨されます。
PHPの配列へのAppending要素に関しては、開発者は[]
演算子( $array[] = $value
)とarray_push
関数(eg、 array_push($array, $value)
)の使用を使用することをしばしば選択します。どちらも同じ目標を達成していますが、ほとんどの場合、一方が他の場合よりも適切になる顕著なパフォーマンスの違いと実用的な考慮事項があります。
![パフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素](https://img.php.cn/upload/article/000/000/000/175429482436054.jpeg)
1。パフォーマンス: []
はより速いです
[]
演算子は、単一の要素を追加するためのarray_push
よりも大幅に高速です。
なぜ?
![パフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素](https://img.php.cn/upload/article/000/000/000/175429482720238.jpeg)
-
array_push
、スタックフレームの作成、パラメーターの渡され、関数ルックアップなどのオーバーヘッドを含む関数呼び出しです。 -
[]
演算子は言語構成です。それは、PHPエンジンによってより低いレベルで直接処理され、より効率的になります。
例ベンチマーク(100,000要素の追加):
$ array = []; // []オペレーターを使用します $ start = microTime(true); for($ i = 0; $ i <100000; $ i){ $ array [] = $ i; } echo "[] operator:"。 (microTime(true) - $ start)。 「秒\ n」; $ array = []; // array_pushを使用します $ start = microTime(true); for($ i = 0; $ i <100000; $ i){ array_push($ array、$ i); } echo "array_push:"。 (microTime(true) - $ start)。 「秒\ n」;
典型的な結果:
![パフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素](https://img.php.cn/upload/article/000/000/000/175429482833230.jpeg)
-
[]
オペレーター:〜0.006秒 array_push
:〜0.025秒
このシナリオでは、 array_push
で4倍遅いです。
2。複数の要素: array_push
が輝く場所
一度に複数の要素を追加する必要がある場合、 array_push
より実用的になりますが、必ずしも高速ではありません。
array_push($ array、 'a'、 'b'、 'c'); // 3つの要素を追加します
[]
構文には3つの別々の行が必要です。
$ array [] = 'a'; $ array [] = 'b'; $ array [] = 'c';
したがって、バルク挿入の場合、 array_push
、パフォーマンスが要素ごとにわずかに悪化したとしても、よりクリーンな構文を提供します。
3。フードの下:なぜ違いが重要なのか
array_push
、参照ごとに配列を受け入れ、任意の数の値を追加して追加します。- それは関数であるため、1つの要素を追加する場合でも、PHPは以下を行う必要があります。
- 最初の引数は配列です
- 値をコピーします
- プッシュ操作を実行します
- 対照的に、
$array[] = $value
OpCode(ASSIGN_DIM
の後にOP_DATA
が続く)に直接変換されます。非常に低レベルで最適化されています。
また、 array_push
、アレイ内の新しい数の要素を返し、小さなオーバーヘッドを追加します。 []
オペレーターは(式のコンテキストで使用されない限り)何も返さないので、よりleanせています。
4。ベストプラクティスと推奨事項
- sed
$array[] = $value
1つまたはいくつかの要素を追加するには、より速く、より一般的です。 -
array_push($array, ...$values)
を一度にプッシュするとき、特に配列付きのSplat演算子を使用する場合。 - opsed単一要素を追加するとき、ループで
array_push
避けます。これはパフォーマンスアンチパターンです。 - ? Array全体をマージするには、php 7.4の
array_merge
またはスプレッドオペレーター([...$arr1, ...$arr2]
)を検討してください。
例:効率的なバルク付録
//複数の値に対して効率的 $ newValues = [1、2、3、4]; array_push($ array、... $ newValues);
または現代のPHPでさらに良い:
$ array = [... $ array、... $ newValues];
結論
シングル要素の付録の場合、 []
演算子はより速く、より慣用的です。 array_push
、1回の呼び出しに複数の値を追加するときにその場所にありますが、パフォーマンスのトレードオフが付属しています。パフォーマンスが批判的なコードまたは大規模ループでは、常に$array[] = $value
を好みます。
基本的に、いくつかのアイテムを一度にプッシュしない限り、 []
スピード、シンプルさ、スタイルで勝ちます。
以上がパフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

PHPアレイに要素を追加するには、位置に従って異なるメソッドを選択する必要があります。1。$ [] syntaxまたはarray_push()を使用して、最後に要素を追加します。より簡潔で効率的であるため、$ []が推奨されます。 2。array_unshift()を使用して最初に要素を追加しますが、数値キーはリセットされます。 3。array_splice()を使用して、インデックスアレイに適した中央の指定された位置に要素を挿入します。 4.キー名を保持するには、array_merge()と組み合わせてarray_merge()と挿入することをお勧めします。各方法は、さまざまなシナリオに適しています。アレイの種類と挿入位置に基づいて合理的に選択し、最終的に柔軟で効率的なアレイ操作を実現する必要があります。

PHPのUnion Operator()を使用すると、特に連想配列の場合、アレイを効果的にマージし、キー名を保持できます。 1.ユニオンオペレーターは、左配列のキー値に基づいており、右配列のキーが左に存在しない場合にのみ追加されます。 2.この機能は、デフォルト値でユーザーが構成した不足しているアイテムを入力するなど、マージシナリオの構成に適しており、既存の設定を上書きしません。 3。インデックス配列の場合、数値キーが競合し、適切な要素が無視されるため、Array_merge()を組合オペレーターの代わりに使用する必要があります。 4。それを使用する場合、デフォルトの配列を右に配置し、チェーン操作をサポートし、元の配列を変更しません。 5.警告を避けるために、すべてのオペランドが配列であることを確認してください。したがって、既存のキー値を保持し、ボイドのみを埋める必要がある場合、ユニオンオペレーターが最良の選択です。

usevariablekeysfordynamicassignmentbysetting $ array [$ key] = $ valuetwithruntimevariables、trustedsourcesAresAnitized.2.mergemultedpey-valuepairesArtaTOnceusisingarray_merge($ key => $ valuate]、notingoverwriteSingingingingingingingingingingingingingingingingingingingingingingingingingingingsingingsingingsingingingsingingsingingsingingnue
![パフォーマンス分析: `[]`オペレーターvs. `array_push` for appending要素](https://img.php.cn/upload/article/001/253/068/175429482123140.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
[] operatorisfasterthanarray_pushforsingle-elementappendsduetoloweroverhead、asitisalanguagececostrucluctluctluctlybythephpengine.2.array_pushismorepracticalforaddinding、subrement-cleanersyntax ownustoaxogentorgemutionsplatop

$ arrayを使用[] = $ valueforefficientseingle-elementadditioninsteadofarray_push()。2.usearray_unshift()topRependelements、butbeawareofo(n)poerformanceduetoreindexing.3.usearray_splice()to insertelementsatanpositionwithswithsis.4.usearray_merge()

Array_merge()と演算子がPHPでの組み合わせとマージを処理する方法は異なります。1。ARRAY_MERGE()は、数値キーを再インデックスし、重複キーを後続の値で上書きします。 2.演算子は、左配列のキー値を保持し、デフォルト値の設定に適した既存のキーを上書きしません。 3。インデックスアレイの場合、オペレーターは重要な競合のために適切な配列値を無視する場合があります。 4.選択は、データ構造と要件に基づいている必要があります。 array_merge()は、リストのマージに適しており、構成またはデフォルト値のマージに適しており、キータイプとパフォーマンスの影響に注意を払う必要があります。

PHPでの大規模なアレイの充填パフォーマンスを最適化するには、メモリ使用量を削減し、実行効率を改善する必要があります。 1.大きな配列ではなく、発電機の使用を優先します。データを1つずつ生成することにより、メモリ使用量はO(n)からO(1)に削減されます。これは、数百万行のCSVまたはデータベースレコードを処理するのに適しています。 2.配列のサイズがphp8で知られている場合は、array_fillを使用してnull値を事前に充填して、ハッシュテーブルのオーバーヘッドを再ハッシュすることで、密度の高い整数インデックスにのみ適しています。 3。$ array [] = $ $ valueを使用して、単一の要素を追加して関数呼び出しのオーバーヘッドを避け、パフォーマンスを20〜30%改善できます。 4。特に回避するための&$ターゲットを使用して、コピーを防ぐためのリファレンスに配列を渡す

$ array [] = $ valueInphp、the zendengineapendStheNextintegerkey、secatednnextfreelementinthehashtableStructure、foremptyarrays.2.theoperationByginswithodeexecution(e.g。、followdybydim)、followedybyginswithodeexecution
