Quoi de mieux à utiliser en PHP, $ array [] = $ value ou array_push ($ array, $ value)?


113

Quoi de mieux à utiliser en PHP pour ajouter un membre de tableau,

$array[] = $value;

ou

array_push($array, $value);

?

Bien que le manuel indique que vous feriez mieux d'éviter un appel de fonction, j'ai également lu que $array[]c'est beaucoup plus lent que array_push(). Quels sont quelques éclaircissements ou repères?


2
$ myArray [] = 123; Ce sera plus rapide que la fonction array_push. Il ajoute directement la valeur dans ce tableau. La fonction a une pile séparée pour ces variables. et il peut avoir cette déclaration dans cette fonction ,.
sganesh

Réponses:


151

Aucun point de repère, mais je pense personnellement que $array[]c'est plus propre à regarder, et honnêtement diviser les cheveux en quelques millisecondes n'est pas pertinent à moins que vous ne prévoyiez d'ajouter des centaines de milliers de chaînes à votre tableau.

Edit : Ran ce 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;

La première méthode utilisée $array[]est presque 50% plus rapide que la seconde.

Quelques résultats de référence:

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

Cela ne devrait pas être surprenant, comme le note le manuel PHP:

Si vous utilisez array_push () pour ajouter un élément au tableau, il est préférable d'utiliser $ array [] = car de cette façon, il n'y a pas de surcharge pour appeler une fonction.

La façon dont il est formulé, je ne serais pas surpris si elle array_pushest plus efficace lors de l'ajout de plusieurs valeurs. EDIT : Par curiosité, j'ai fait quelques tests supplémentaires, et même pour un grand nombre d'ajouts, les $array[]appels individuels sont plus rapides qu'un gros array_push. Intéressant.


Je préfère toujours savoir quel est le moyen le plus rapide, alors le jour venu, on me demandera de produire un site à fort trafic, j'aurai un aperçu. Merci d'avoir répondu.
alex

10
Les micro-optimisations comme celles-ci valent rarement la peine. Si vous l'écrivez à partir de zéro, faites-le de la manière la plus logique, et alors seulement, s'il est un peu lent à produire une page, profilez-la. Les chances de devoir changer quelque chose comme ça pour accélérer les choses sont minces.
Alister Bulman

4
Juste pour être sûr, puisque le code semble ne pas correspondre à la sortie, j'ai vérifié que $array[]c'est en effet beaucoup plus rapide, 300 ms contre 2000 ms pour les affectations de 1M sur ma machine. Cependant, l'ajout de 20 éléments à la fois dans array_push était à peu près aussi rapide que 20 $array[] =s.
Elle

5
@AlisterBulman Les micro-optimisations ne valent pas l'effort si vous songez à revenir sur l'ensemble de votre base de code et à «l'optimiser». Cependant, si vous avez plusieurs façons différentes de faire la même chose et que vous êtes conscient qu'une méthode est meilleure (même un peu) que les autres, vous pouvez en prendre l'habitude. Pourquoi tu ne ferais pas ça?
Okonomiyaki3000

2
@AlisterBulman Je dois être fortement en désaccord, ou du moins partiellement, si vous savez mieux, écrire mieux , mais ne faites pas beaucoup d'efforts pour rechercher une éventuelle micro-optimisation ...
jave.web

42

L'utilisation principale de array_push () est que vous pouvez pousser plusieurs valeurs à la fin du tableau.

Il dit dans la documentation :

Si vous utilisez array_push () pour ajouter un élément au tableau, il est préférable d'utiliser $ array [] = car de cette façon, il n'y a pas de surcharge pour appeler une fonction.


29

À partir de la documentation php pourarray_push :

Remarque: Si vous utilisez array_push () pour ajouter un élément au tableau, il est préférable d'utiliser $ array [] = car de cette façon, il n'y a pas de surcharge pour appeler une fonction.


C'est drôle comme votre réponse a été la première, mais c'est la moins votée.
T.Woody

21

Le mot dans la rue est que [] est plus rapide car pas de surcharge pour l'appel de fonction. De plus, personne n'aime vraiment les fonctions de tableau de PHP ...

"Est-ce ... une botte de foin, une aiguille ... ou est-ce une botte de foin d'aiguille ... ah, f *** it ... [] ="


7
Hein? Les fonctions de tableau de PHP sont géniales.
cletus

13
Fonctionnellement, ils sont géniaux, oui, mais il faisait référence au schéma de dénomination incohérent.
ryeguy

2
Vous devez activer l'indication de paramètre dans votre IDE. Mais je suis d'accord, une certaine cohérence aurait été formidable.
Pim Jager

4
Je suis d'accord là-dessus. Il n'y a pas de cohérence ni dans le schéma de nommage (x_y ou xy ou y_x ...) ni dans la logique des paramètres (passer l'objet cible en premier, en dernier, entre les tableaux, les chaînes et les expressions régulières, bonne chance pour trouver une règle commune!).
e2-e4

3
FWIW, j'aime la convention de dénomination aiguille / meule de foin et je la trouve facile à retenir, car elle va dans le même ordre que la phrase: "comme trouver une aiguille (1) dans une botte de foin (2)"
rybo111

8

Une différence est que vous pouvez appeler array_push () avec plus de deux paramètres, c'est-à-dire que vous pouvez pousser plus d'un élément à la fois vers un tableau.

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

impressions 1,2,3,4


2

Une simple déclaration $ myarray [] sera plus rapide car vous ne faites que pousser un élément sur la pile d'éléments en raison du manque de surcharge qu'une fonction entraînerait.


2

Puisque " array_push " est une fonction et qu'il est appelé plusieurs fois quand il est à l'intérieur de la boucle, il allouera une mémoire dans la pile. Mais lorsque nous utilisons $ array [] = $ value, nous attribuons simplement une valeur à array.


1

Le deuxième est un appel de fonction, donc généralement, il devrait être plus lent que l'utilisation des fonctionnalités principales d'accès au tableau. Mais je pense que même une requête de base de données dans votre script dépassera 1.000.000 appels à array_push().


0

Bien que la question portait davantage sur la performance, les gens en viendront à se demander si c'est une bonne pratique à utiliser array_pushou $arr[].

La fonction peut signifier des lignes plus petites pour plusieurs valeurs:

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

Cependant , array_push...

  • ne peut pas recevoir les clés du tableau
  • rompt la convention de dénomination des aiguilles / meules de foin
  • est plus lent, comme cela a été discuté

Je resterai avec $arr[].


0

Je veux juste ajouter: int array_push(...)retourner le nouveau nombre d'éléments dans le tableau ( php doc ). qui peut être utile et plus compact que $myArray[] = ...; $total = count($myArray);.

Est également array_push(...)significatif lorsque la variable est utilisée comme pile.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.