PHPでは$ array [] = $ valueまたはarray_push($ array、$ value)を使用する方が良いでしょうか?


113

配列メンバーを追加するためにPHPで使用するほうがよいこと

$array[] = $value;

または

array_push($array, $value);

マニュアルには関数呼び出しを避ける方がいいと書いてありますが、私も読んだ方$array[]がずっと遅いですarray_push()。いくつかの説明やベンチマークは何ですか?


2
$ myArray [] = 123; これはarray_push関数よりも高速です。値をその配列に直接追加します。関数には、その変数用の個別のスタックがあります。そして、その関数の中にそのステートメントがあるかもしれません。
sganesh

回答:


150

ベンチマークはありませんが、個人的に$array[]は見た目がすっきりしているように感じます。数十万の文字列を配列に追加することを計画していない限り、ヘアを数ミリ秒で正直に分割することはかなり重要ではありません。

編集:このコードを実行しました:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;

最初の方法を使用する$array[]と、2番目の方法よりもほぼ50%高速です。

いくつかのベンチマーク結果:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]

PHPマニュアルに次のように記載されているので、これは驚くべきことではありません。

array_push()を使用して1つの要素を配列に追加する場合は、$ array [] =を使用することをお勧めします。この方法では、関数を呼び出すオーバーヘッドがないためです。

それがarray_push複数の値を追加するときにより効率的であるならば、それが言い表されている方法は驚かないでしょう。編集:好奇心から、いくつかのさらなるテストを行い、大量の追加を行っても、個々の$array[]呼び出しは1つの大きなものよりも高速ですarray_push。面白い。


私は常にどちらが最速の方法であるかを常に知りたいので、その日が来ると、トラフィックの多いサイトを作成するように求められます。答えてくれてありがとう。
アレックス

10
このようなマイクロ最適化は、努力する価値はほとんどありません。最初から作成する場合は、最も理にかなった方法で作成します。ページの作成が少し遅い場合は、プロファイルを作成してください。スピードを上げるために、このようなものを変更する必要があるまでずっと下がる可能性はわずかです。
アリスターブルマン

4
念のため、コードが出力と一致していないように見えるので、$array[]実際にははるかに高速であることが確認されました。私のマシンでの1M割り当てでは、300ms対2000msです。ただし、array_pushで一度に20項目を追加すると、約20 $array[] =秒で高速になりました。
Elle、

5
@AlisterBulmanマイクロ最適化は、コードベース全体をさかのぼって「最適化」することを考えている場合、努力する価値はありません。ただし、同じことを行ういくつかの異なる方法があり、1つの方法が他の方法よりも(少しでも)優れていることに気付いている場合は、その方法を使用する習慣をつけることができます。なぜこれをしませんか?
お好み焼き3000

2
@AlisterBulman私は強く反対する必要があります、または少なくとも部分的には、あなたがよりよく知っている場合はよりよく書くことができますが、マイクロ最適化の可能性を探すことにあまり力を入れないでください...
jave.web

42

array_push()の主な用途は、配列の最後に複数の値をプッシュできることです。

それはで言う ドキュメントで

array_push()を使用して1つの要素を配列に追加する場合は、$ array [] =を使用することをお勧めします。この方法では、関数を呼び出すオーバーヘッドがないためです。



21

通りに言えば、関数呼び出しのオーバーヘッドがないため、[]の方が高速です。さらに、PHPの配列関数が本当に好きな人はいない...

「それは...干し草の山か、針か...それとも、針の干し草か...あ、f ***それ... [] = "


7
え?PHPの配列関数は素晴らしいです。
cletus 2009

13
機能的には素晴らしいですが、彼は一貫性のない命名方式に言及していました。
ryeguy

2
IDEでパラメータヒントをオンにする必要があります。しかし、私は同意します、ある程度の一貫性は素晴らしかったでしょう。
ピムイェーガー

4
私はこれに同意します。命名スキーム(x_yまたはxyまたはy_x ...)にもパラメーターロジックにも一貫性はありません(ターゲットオブジェクトを最初に、最後に、配列、文​​字列、正規表現間で渡します。共通のルールを見つけるために頑張ってください!)。
e2-e4 2010年

3
FWIW、私はneedle / haystackの命名規則が好きで
haystack

8

1つの違いは、2つ以上のパラメーターを指定してarray_push()を呼び出すことができることです。つまり、一度に複数の要素を配列にプッシュできます。

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);

プリント 1,2,3,4


2

単純な$ myarray []宣言は、関数がもたらすオーバーヘッドがないため、アイテムのスタックにアイテムをプッシュしているだけなので、より速くなります。


2

array_push」は関数であり、ループ内にあるときに複数回呼び出されるため、メモリをスタックに割り当てます。しかし、$ array [] = $ valueを使用している場合は、配列に値を割り当てるだけです。


1

2つ目は関数呼び出しであるため、一般に、コアアレイアクセス機能を使用するよりも遅くなるはずです。しかし、スクリプト内の1つのデータベースクエリでも、1.000.000への呼び出しを上回ると思いますarray_push()


0

問題はパフォーマンスに関するものでしたが、使用するのが良い習慣なのarray_pushか、$arr[]

この関数は、複数の値に対してより少ない行を意味する場合があります。

// 1 line:
array_push($arr, "Bob", "Steve");
// versus 2 lines:
$arr[] = "Bob";
$arr[] = "Steve";

しかしarray_push...

  • 配列キーを受信できません
  • 針/干し草を壊します命名規則
  • 議論されているように、遅いです

私はこだわります$arr[]


0

追加したくないのint array_push(...)は、配列内の新しい要素数を返すことです(php doc)。便利でコンパクトな$myArray[] = ...; $total = count($myArray);

また、array_push(...)変数をスタックとして使用されたときに意味があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.