Unterschied zwischen array_push () und $ array [] =

117

Im PHP-Handbuch sagt ( array_push ) ..

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.

Zum Beispiel :

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

vs.

$arr[] = "stackoverflow";
print_r($arr);

Ich verstehe nicht, warum es einen großen Unterschied gibt.

l2aelba
quelle
8
Einer ist ein Funktionsaufruf, der andere nicht. Genau das, was in der Box erwähnt wird.
KingCrunch
1
Einer ist der oben erwähnte Funktionsaufruf, der die Verwendung einiger Ressourcen zum Umschalten der Steuerung zum / vom Funktionsaufruf bedeutet (was zu einer Overhead-Verarbeitung führte). Später wird dem Array einfach sofort ein neues Element zugewiesen.
Ghazanfar Mir
2
Diese Frage ersparte mir viel Zeit beim Schieben auf Arrays :)
RozzA

Antworten:

151

Wenn Sie eine Funktion in PHP aufrufen (z. B. array_push()), entsteht ein Overhead für den Aufruf, da PHP die Funktionsreferenz nachschlagen, ihre Position im Speicher finden und den von ihm definierten Code ausführen muss.

Die Verwendung $arr[] = 'some value';erfordert keinen Funktionsaufruf und implementiert die Addition direkt in die Datenstruktur. Wenn Sie also viele Daten hinzufügen, ist die Verwendung viel schneller und ressourcenschonender $arr[].

BenM
quelle
3
Was ist, wenn eine solche Notation "$ arr [] = 'irgendein Wert';" läuft auf den Aufruf der Funktion hinaus?
Tebe
1
@gekannt Wie würde das passieren? Meinst du, wenn 'irgendein Wert' in deinem Kommentar eine Schließung ist? Das würde die Referenz des Verschlusses im Array speichern. Wenn Sie meinen, dass 'irgendein Wert' eine Funktion ist, die aufgerufen wird, würde sie hinzufügen, was auch immer diese Funktion zurückgibt.
Kirkland
@ Kirkland Operatoren sind nur Funktionen mit einer alternativen Syntax in den meisten C-ähnlichen Sprachen. Ich bin kein PHP-Experte, aber ich kann mir vorstellen, dass sie Operatoren auf die gleiche Weise implementiert haben, da es sich um einen C-Dialekt handelt.
Kevin
1
@ Kevin: du stimmst dir zu und ich bin mir ziemlich sicher, dass hinter der alternativen Syntax eine Funktion steckt, die nicht die oben erwähnte ist, da ich den folgenden Kommentar in der PHP-Dokumentation sehe: "Wenn du array_push () verwendest, um ein Element hinzuzufügen Für das Array ist es besser, $ array [] = zu verwenden, da auf diese Weise kein Aufwand für den Aufruf einer Funktion entsteht. "
Ich
Gibt es tatsächlich Beweise, $arr[] = valuedie schneller sind? Ich versuche mir vorzustellen, warum der Compiler den Code anders behandeln würde.
c ..
44

Mit array_push können Sie dem Array mehr als ein Element in einer Aufnahme hinzufügen.

z.B array_push($array_name, $element1, $element2,...)

Wobei $ element1, $ element2, ... Elemente sind, die dem Array hinzugefügt werden sollen.

Wenn Sie jedoch jeweils nur ein Element hinzufügen möchten, sollte eine andere Methode (z. B. die Verwendung von $ array_name []) bevorzugt werden.

Sujit Singh
quelle
Ist es eine schlechte Praxis, beide während eines Projekts nach Bedarf zu kombinieren?
PBwebD
1
@ testing123 Auf keinen Fall. Es wird empfohlen, die effizienteste verfügbare Lösung zu verwenden, es sei denn, sie beeinträchtigt die Lesbarkeit, Kompatibilität usw. erheblich (oder Sie müssen bestimmte Style-Guides befolgen).
Chris Kraszewski
15

Der Unterschied besteht in der folgenden Zeile zu "weil auf diese Weise kein Overhead beim Aufrufen einer Funktion entsteht".

array_push()löst eine Warnung aus, wenn das erste Argument kein Array ist. Dies unterscheidet sich von dem $var[]Verhalten, bei dem ein neues Array erstellt wird.

Baig
quelle
4
Ich habe nicht gesagt, dass es ein Grund ist. In der Frage wurde Unterschied gestellt und dies ist auch der Unterschied
Baig
7

Sie sollten immer verwenden, $array[]wenn möglich, da, wie in der Box angegeben, kein Overhead für den Funktionsaufruf anfällt. Somit ist es etwas schneller als der Funktionsaufruf.

Benjamin Paap
quelle
4

array_push - Schieben Sie ein oder mehrere Elemente an das Ende des Arrays

Beachten Sie die Wörter " ein oder mehrere Elemente am Ende ", um dies zu tun, $arr[]müssten Sie die maximale Größe des Arrays ermitteln

Ianace
quelle
Zu "Um dies mit $ arr [] zu tun, müssten Sie die maximale Größe des Arrays ermitteln" . Nein, Sie verwechseln das, $arr[...index...] = $value;was hier diskutiert wird $arr[] = $value;. Sie müssen weder die Größe noch das Array kennen, um am Ende zu pushen. Mehrere Elemente wären einfach mehrere Aufrufe: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve
2

Erklären Sie: 1.Der erste deklariert die Variable im Array.

2. Die zweite array_push-Methode wird verwendet, um den String in die Array-Variable zu verschieben.

3. Schließlich wird das Ergebnis gedruckt.

4. Die zweite Methode besteht darin, die Zeichenfolge direkt im Array zu speichern.

5. Die Daten werden mit der Methode print_r in den Array-Werten gedruckt.

Diese beiden sind gleich

Saravana Kumar
quelle
1

beide sind gleich, aber array_push macht eine Schleife in seinem Parameter, der ein Array ist, und führt $ array [] = $ element aus

Sara
quelle
0

Ich weiß, dass dies eine alte Antwort ist, aber es könnte für andere hilfreich sein zu wissen, dass ein weiterer Unterschied zwischen beiden darin besteht, dass die Verwendung von mehr als 2/3 Werten pro Schleife zu einem Array schneller ist:

     for($i = 0; $i < 10; $i++){
          array_push($arr, $i, $i*2, $i*3, $i*4, ...)
     }

anstatt:

     for($i = 0; $i < 10; $i++){
         $arr[] = $i;
         $arr[] = $i*2;
         $arr[] = $i*3;
         $arr[] = $i*4;
         ...
     }

edit- Vergessen, die Klammer für die forBedingung zu schließen

Antoniu Livadariu
quelle
1
Ich frage mich, wie das mit array_merge verglichen wird. ZB for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Ich spekuliere array_push ist immer noch etwas schneller.
ToolmakerSteve
0

Niemand hat es gesagt, aber array_push schiebt nur ein Element an das ENDE DES ARRAYS, wo $ array [index] einen Wert an einem bestimmten Index einfügen kann. Großer Unterschied.

Marco
quelle
Die Frage war der "Unterschied zwischen array_push () und $ array [] =", was ich gesagt habe, ist ein Unterschied. Ein großer!
Marco
1
Ich bin respektvoll anderer Meinung. Sie beschreiben $array[index] = , was eine andere Operation ist als $array[] = .... Die Frage enthält zwei Codeteile und fragt, warum zwischen ihnen ein signifikanter [Leistungs-] Unterschied besteht . Die Frage bedeutet wörtlich $array[] = ..., was ein spezifisches PHP-Idiom ist, das keinen Index beinhaltet. Array + Index löst ein anderes Problem, liefert anderen Code und ist ein anderer Kompromiss.
ToolmakerSteve