Differenza tra array_push () e $ array [] =


117

Nel manuale PHP, ( array_push ) dice ..

Se usi array_push () per aggiungere un elemento all'array è meglio usare $ array [] = perché in questo modo non c'è overhead per chiamare una funzione.

Per esempio :

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

vs

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

Non capisco perché ci sia una grande differenza.


8
Uno è una chiamata di funzione, l'altro no. Esattamente ciò che è menzionato nella scatola.
KingCrunch

1
Uno è la chiamata di funzione come accennato in precedenza, il che significa l'uso di alcune risorse per passare il controllo alla / dalla chiamata di funzione (quindi ha provocato l'elaborazione di overhead). Considerando che, in seguito si assegna semplicemente un nuovo elemento all'array immediatamente.
Ghazanfar Mir

2
questa domanda mi ha fatto risparmiare un sacco di tempo a spingere agli array :)
RozzA

Risposte:


151

Quando chiami una funzione in PHP (come array_push()), ci sono costi generali per la chiamata, poiché PHP deve cercare il riferimento alla funzione, trovare la sua posizione in memoria ed eseguire qualsiasi codice che definisce.

L'utilizzo $arr[] = 'some value';non richiede una chiamata di funzione e implementa l'aggiunta direttamente nella struttura dei dati. Pertanto, quando si aggiungono molti dati è molto più veloce ed efficiente in termini di risorse da utilizzare $arr[].


3
e se tale notazione "$ arr [] = 'some value';" si riduce alla chiamata di funzione?
Tebe

1
@gekannt Come sarebbe successo? Intendi dire se "qualche valore" nel tuo commento è una chiusura? Ciò memorizzerebbe il riferimento della chiusura nell'array. Se intendi che "qualche valore" è una funzione che viene invocata, aggiungerebbe qualunque cosa restituisca quella funzione.
Kirkland

Gli operatori @Kirkland sono solo funzioni con una sintassi alternativa nella maggior parte dei linguaggi C-like, non sono un esperto di PHP, ma posso immaginare che abbiano implementato gli operatori allo stesso modo poiché è un dialetto C.
Kevin il

1
@ Kevin: tu sono d'accordo con te e sono abbastanza sicuro che ci sia una funzione dietro la sintassi alternativa non è quella menzionata sopra poiché vedo il seguente commento nella documentazione di php: "Se usi array_push () per aggiungere un elemento per l'array è meglio usare $ array [] = perché in questo modo non c'è overhead per chiamare una funzione. " non ho tempo ora per vedere esattamente cosa c'è dietro perché il termine di ricerca è un po 'confuso per i motori di ricerca :)
jnhghy - Alexandru Jantea

Esistono prove concrete che $arr[] = valuesiano più veloci? Cercando di immaginare perché il compilatore tratterebbe il codice in modo diverso.
c ..

44

Puoi aggiungere più di 1 elemento in una volta all'array usando array_push,

per esempio array_push($array_name, $element1, $element2,...)

Dove $ element1, $ element2, ... sono elementi da aggiungere all'array.

Ma se vuoi aggiungere un solo elemento alla volta, allora dovrebbe essere preferito un altro metodo (cioè usando $ array_name []).


È una cattiva pratica combinare i due come necessario durante un progetto?
PBwebD

1
@ testing123 Assolutamente no. È una buona pratica utilizzare la soluzione più efficiente disponibile a portata di mano, a meno che non comprometta gravemente la leggibilità, la compatibilità, ecc. (O se è necessario obbedire a determinate guide di stile).
Chris Kraszewski

15

La differenza sta nella riga sotto a "perché in questo modo non c'è overhead per chiamare una funzione".

array_push()genererà un avviso se il primo argomento non è un array. Ciò è diverso dal $var[]comportamento in cui viene creato un nuovo array.


4
Non ho detto che fosse un motivo. Nella domanda, è stata posta la differenza e questa è anche la differenza
Baig

7

Dovresti sempre usare, $array[]se possibile, perché, come afferma la casella, non vi è alcun sovraccarico per la chiamata di funzione. Quindi è un po 'più veloce della chiamata di funzione.


4

array_push - uno o più elementi alla fine dell'array

Prendi nota delle parole " uno o più elementi alla fine " per farlo usando $arr[]dovresti ottenere la dimensione massima dell'array


Ri "per farlo usando $ arr [] dovresti ottenere la dimensione massima dell'array" . No, ti stai confondendo $arr[...index...] = $value;con ciò che viene discusso qui, ovvero $arr[] = $value;. Non è necessario conoscere la dimensione o la matrice, per spingere alla fine. Più elementi sarebbero semplicemente più chiamate: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

spiegare: 1.il primo dichiara la variabile in array.

2.il secondo metodo array_push viene utilizzato per inserire la stringa nella variabile array.

3.finalmente stamperà il risultato.

4.il secondo metodo è memorizzare direttamente la stringa nell'array.

5.i dati vengono stampati nei valori dell'array utilizzando il metodo print_r.

questi due sono gli stessi


1

entrambi sono uguali, ma array_push fa un ciclo nel suo parametro che è un array ed esegue $ array [] = $ element


0

So che questa è una vecchia risposta ma potrebbe essere utile per gli altri sapere che un'altra differenza tra i due è che se devi aggiungere più di 2/3 valori per ciclo a un array è più veloce da usare:

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

invece di:

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

modifica - Hai dimenticato di chiudere la parentesi per il forcondizionale


1
Mi chiedo come si paragoni a array_merge. Ad esempio for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Suppongo che array_push sia ancora leggermente più veloce di così.
ToolmakerSteve

0

Nessuno l'ha detto, ma array_push spinge solo un elemento alla FINE DELL'ARRAY, dove $ array [index] può inserire un valore in un dato indice. Grande differenza.


La domanda era la "Differenza tra array_push () e $ array [] =" quello che ho detto è una differenza. Uno grosso!
Marco

1
Rispettosamente non sono d'accordo. Stai descrivendo $array[index] = , che è un'operazione diversa da $array[] = .... La domanda fornisce due parti di codice e chiede perché ci sarebbe una differenza significativa [di prestazioni] tra di loro. La domanda significa letteralmente $array[] = ..., che è un idioma php specifico, che non coinvolge un indice. array + index risolve un problema diverso, produce codice diverso e rappresenta un compromesso diverso.
ToolmakerSteve
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.