Cosa c'è di meglio da usare in PHP, $ array [] = $ value o array_push ($ array, $ value)?


113

Cosa c'è di meglio da usare in PHP per aggiungere un membro dell'array,

$array[] = $value;

o

array_push($array, $value);

?

Sebbene il manuale dica che è meglio evitare una chiamata di funzione, ho anche letto che $array[]è molto più lento di array_push(). Quali sono alcuni chiarimenti o benchmark?


2
$ myArray [] = 123; Sarà più veloce della funzione array_push. Aggiunge direttamente il valore a quell'array. La funzione ha uno stack separato per quelle variabili. e potrebbe avere quell'istruzione all'interno di quella funzione.
sganesh

Risposte:


150

Nessun benchmark, ma personalmente ritengo che $array[]sia più pulito da guardare e, onestamente, dividere i capelli in millisecondi è piuttosto irrilevante a meno che non si preveda di aggiungere centinaia di migliaia di stringhe al proprio array.

Modifica : ho eseguito questo codice:

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

Il primo metodo utilizzato $array[]è quasi il 50% più veloce del secondo.

Alcuni risultati di benchmark:

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

Questo non dovrebbe sorprendere, poiché il manuale PHP lo rileva:

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

Il modo in cui è formulato non sarei sorpreso se array_pushfosse più efficiente quando si aggiungono più valori. EDIT : Per curiosità, ho fatto ulteriori test e, anche per una grande quantità di aggiunte, le $array[]chiamate individuali sono più veloci di una grande array_push. Interessante.


Preferisco sempre sapere qual è il modo più veloce, quindi quando verrà il giorno mi verrà chiesto di produrre un sito ad alto traffico, avrò qualche intuizione. Grazie per la risposta.
alex

10
Le micro-ottimizzazioni come queste raramente valgono lo sforzo. Se lo stai scrivendo da zero, fallo nel modo più sensato e solo allora, se è un po 'lento a produrre una pagina, profilala. Le possibilità di dover cambiare qualcosa del genere per accelerare le cose sono scarse.
Alister Bulman

4
Solo per essere sicuro, poiché il codice sembra non corrispondere all'output, ho verificato che $array[]è effettivamente molto più veloce, 300 ms contro 2000 ms per 1 milione di assegnazioni sulla mia macchina. Tuttavia, l'aggiunta di 20 elementi contemporaneamente in array_push è stata di circa 20 $array[] =secondi.
Elle

5
@AlisterBulman Le micro-ottimizzazioni non valgono lo sforzo se stai pensando di tornare indietro attraverso l'intera base di codice e di "ottimizzarla". Tuttavia, se hai diversi modi per fare la stessa cosa e sei consapevole che un modo è migliore (anche solo un po ') degli altri, puoi prendere l'abitudine di usarlo in quel modo. Perché non lo fai?
Okonomiyaki 3000,

2
@AlisterBulman Devo assolutamente essere in disaccordo, o almeno in parte, se lo sai meglio, scrivere meglio , ma non fare molti sforzi per cercare una possibile
microottimizzazione

42

L'uso principale di array_push () è che puoi inserire più valori alla fine dell'array.

Dice nella documentazione :

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


29

Dai documenti php perarray_push :

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


Buffo come la tua risposta sia stata la prima, ma è quella meno votata.
T.Woody

21

Si dice che [] sia più veloce perché nessun overhead per la chiamata di funzione. Inoltre, a nessuno piacciono davvero le funzioni di array di PHP ...

"È ... pagliaio, ago ... o è ago pagliaio ... ah, fanculo ... [] ="


7
Eh? Le funzioni di array di PHP sono fantastiche.
cletus

13
Funzionalmente sono fantastici, sì, ma si riferiva allo schema di denominazione incoerente.
Ryeguy

2
Dovresti attivare i suggerimenti sui parametri nel tuo IDE. Ma sono d'accordo, un po 'di coerenza sarebbe stato fantastico.
Pim Jager

4
Sono d'accordo su questo. Non c'è coerenza né nello schema di denominazione (x_y o xy o y_x ...) né nella logica dei parametri (passare l'oggetto target per primo, per ultimo, tra array, stringhe e regexps, buona fortuna per trovare una regola comune!).
e2-e4

3
FWIW, mi piace la convenzione di denominazione ago / pagliaio e la trovo facile da ricordare, poiché va nello stesso ordine della frase: "come trovare un ago (1) in un pagliaio (2)"
rybo111

8

Una differenza è che puoi chiamare array_push () con più di due parametri, cioè puoi inviare più di un elemento alla volta a un array.

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

stampe 1,2,3,4


2

Una semplice dichiarazione $ myarray [] sarà più veloce poiché stai semplicemente inserendo un elemento nella pila di elementi a causa della mancanza di overhead che una funzione porterebbe.


2

Poiché " array_push " è una funzione e viene chiamata più volte quando è all'interno del ciclo, quindi allocherà una memoria nello stack. Ma quando usiamo $ array [] = $ value allora assegniamo semplicemente valore ad array.


1

Il secondo è una chiamata di funzione, quindi generalmente dovrebbe essere più lento rispetto all'utilizzo delle funzionalità di accesso all'array di base. Ma penso che anche una query al database all'interno del tuo script supererà 1.000.000 di chiamate a array_push().


0

Sebbene la domanda riguardasse più le prestazioni, le persone arriveranno a questa domanda chiedendosi se sia una buona pratica usare array_pusho $arr[].

La funzione potrebbe significare linee minori per più valori:

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

Tuttavia , array_push...

  • non può ricevere le chiavi dell'array
  • rompe la convenzione di denominazione ago / pagliaio
  • è più lento, come è stato discusso

Io resterò fedele $arr[].


0

Non voglio solo aggiungere: int array_push(...)restituisce il nuovo numero di elementi nell'array ( php doc ). che può essere utile e più compatto di $myArray[] = ...; $total = count($myArray);.

Inoltre array_push(...)è significativo quando la variabile viene utilizzata come stack.

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.