Was ist besser in PHP zu verwenden, $ array [] = $ value oder array_push ($ array, $ value)?

113

Was ist besser in PHP zum Anhängen eines Array-Mitglieds zu verwenden?

$array[] = $value;

oder

array_push($array, $value);

?

Obwohl das Handbuch besagt, dass Sie besser dran sind, um einen Funktionsaufruf zu vermeiden, habe ich auch gelesen, dass $array[]es viel langsamer ist als array_push(). Was sind einige Klarstellungen oder Benchmarks?

Alex
quelle
2
$ myArray [] = 123; Dies ist schneller als die Funktion array_push. Der Wert wird direkt zu diesem Array hinzugefügt. Die Funktion verfügt über einen separaten Stapel für diese Variablen. und es kann diese Anweisung in dieser Funktion haben.
Sganesh

Antworten:

150

Keine Benchmarks, aber ich persönlich bin der Meinung, dass $array[]es sauberer anzusehen ist, und das ehrliche Aufteilen von Haaren über Millisekunden ist ziemlich irrelevant, es sei denn, Sie planen, Hunderttausende von Zeichenfolgen an Ihr Array anzuhängen.

Edit : Ran diesen Code:

$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;

Die erste Methode $array[]ist fast 50% schneller als die zweite.

Einige Benchmark-Ergebnisse:

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[]

Dies sollte nicht überraschen, da das PHP-Handbuch Folgendes feststellt:

Wenn Sie array_push () verwenden, um dem Array ein Element hinzuzufügen, ist es besser, $ array [] = zu verwenden, da auf diese Weise kein Aufwand für den Aufruf einer Funktion entsteht.

Die Art und Weise, wie es formuliert ist, würde mich nicht wundern, wenn array_pushes effizienter ist, mehrere Werte hinzuzufügen. EDIT : Aus Neugier einige weitere Tests durchgeführt und sogar für eine große Anzahl von Ergänzungen individuell$array[] Anrufe schneller als ein großer array_push. Interessant.

Paolo Bergantino
quelle
Ich möchte einfach immer lieber wissen, welcher Weg der schnellste ist. Wenn der Tag kommt, werde ich gebeten, eine Website mit hohem Datenaufkommen zu erstellen. Ich werde einen Einblick erhalten. Danke für die Antwort.
alex
10
Mikrooptimierungen wie diese sind selten die Mühe wert. Wenn Sie es von Grund auf neu schreiben, tun Sie es so, wie es am sinnvollsten ist, und erst dann, wenn die Erstellung einer Seite etwas langsam ist, profilieren Sie es. Die Chancen, dass man so etwas ändern muss, um die Dinge zu beschleunigen, sind gering.
Alister Bulman
4
Um sicherzugehen, dass der Code nicht mit der Ausgabe übereinstimmt, habe ich überprüft, dass dies $array[]tatsächlich viel schneller ist: 300 ms gegenüber 2000 ms für 1 Mio. Zuweisungen auf meinem Computer. Das gleichzeitige Hinzufügen von 20 Elementen in array_push dauerte jedoch ungefähr 20 Sekunden $array[] =.
Elle
5
@AlisterBulman Mikrooptimierungen sind die Mühe nicht wert, wenn Sie darüber nachdenken, Ihre gesamte Codebasis erneut zu durchlaufen und sie zu "optimieren". Wenn Sie jedoch verschiedene Möglichkeiten haben, dasselbe zu tun, und sich bewusst sind, dass eine Möglichkeit besser ist (auch nur ein wenig) als die anderen, können Sie es sich zur Gewohnheit machen, diese Methode zu verwenden. Warum würdest du das nicht tun?
Okonomiyaki3000
2
@AlisterBulman Ich muss stark widersprechen, oder zumindest teilweise, wenn Sie es besser wissen, schreiben Sie besser , aber geben Sie sich nicht viel Mühe, nach einer möglichen
Mikrooptimierung
42

Die Hauptverwendung von array_push () besteht darin, dass Sie mehrere Werte an das Ende des Arrays verschieben können.

In der Dokumentation heißt es :

Wenn Sie array_push () verwenden, um dem Array ein Element hinzuzufügen, ist es besser, $ array [] = zu verwenden, da auf diese Weise kein Aufwand für den Aufruf einer Funktion entsteht.

Inspirieren
quelle
29

Aus den PHP-Dokumenten fürarray_push :

Hinweis: Wenn Sie array_push () verwenden, um dem Array ein Element hinzuzufügen, ist es besser, $ array [] = zu verwenden, da auf diese Weise kein Aufwand für den Aufruf einer Funktion entsteht.

Benedict Cohen
quelle
Komisch, wie deine Antwort zuerst war, aber darüber wird weniger abgestimmt.
T. Woody
21

Auf der Straße heißt es, dass [] schneller ist, weil kein Overhead für den Funktionsaufruf anfällt. Außerdem mag niemand die Array-Funktionen von PHP wirklich ...

"Ist es ... Heuhaufen, Nadel ... oder ist es Nadel Heuhaufen ... ah, verdammt ... [] ="

typoneerror
quelle
7
Huh? Die Array-Funktionen von PHP sind fantastisch.
Cletus
13
Funktionell sind sie fantastisch, ja, aber er bezog sich auf das inkonsistente Namensschema.
Ryeguy
2
Sie sollten die Parameterhinweise in Ihrer IDE aktivieren. Aber ich stimme zu, eine gewisse Konsistenz wäre großartig gewesen.
Pim Jager
4
Dem stimme ich zu. Weder Es gibt keine Konsistenz in der Namensschema (X_Y oder xy oder y_x ...) noch in der Parameter - Logik (zuerst das Zielobjekt übergeben, zuletzt zwischen Arrays, Strings und reguläre Ausdrücke, viel Glück eine gemeinsame Regelung zu finden!).
e2-e4
3
FWIW, ich mag die Namenskonvention für Nadel / Heuhaufen und finde es leicht, mich daran zu erinnern, da sie in der gleichen Reihenfolge wie der Satz
lautet
8

Ein Unterschied besteht darin, dass Sie array_push () mit mehr als zwei Parametern aufrufen können, dh Sie können mehr als ein Element gleichzeitig an ein Array senden.

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

druckt 1,2,3,4

VolkerK
quelle
2

Eine einfache $ myarray [] -Deklaration ist schneller, da Sie nur ein Element auf den Elementstapel schieben, da eine Funktion keinen Overhead verursachen würde.

Tom Hallam
quelle
2

Da " array_push " eine Funktion ist und mehrmals aufgerufen wird, wenn sie sich innerhalb der Schleife befindet, wird dem Stapel ein Speicher zugewiesen. Wenn wir jedoch $ array [] = $ value verwenden, weisen wir dem Array nur einen Wert zu.

Vinod Kirte
quelle
1

Der zweite ist ein Funktionsaufruf, der im Allgemeinen langsamer sein sollte als die Verwendung der wichtigsten Array-Zugriffsfunktionen. Aber ich denke, dass sogar eine Datenbankabfrage in Ihrem Skript 1.000.000 Aufrufe an übergewichtet array_push().

Stefan Gehrig
quelle
0

Obwohl es bei der Frage eher um Leistung ging, werden sich die Leute fragen, ob es eine gute Praxis ist, array_pushoder zu verwenden $arr[].

Die Funktion kann für mehrere Werte kleinere Zeilen bedeuten:

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

Allerdings , array_push...

  • kann die Array-Schlüssel nicht empfangen
  • bricht die Namenskonvention für Nadel / Heuhaufen
  • ist langsamer, wie diskutiert wurde

Ich bleibe dabei $arr[].

rybo111
quelle
0

Ich möchte nur nicht hinzufügen: Geben Sie int array_push(...)die neue Anzahl von Elementen im Array zurück ( PHP-Dokument ). das kann nützlich und kompakter sein als $myArray[] = ...; $total = count($myArray);.

Ist auch array_push(...)sinnvoll, wenn eine Variable als Stapel verwendet wird.

Jean-Luc Barat
quelle