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?

Alex
la source
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.

Paolo Bergantino
la source
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.

Inspirer
la source
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.

Benoît Cohen
la source
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 ... [] ="

typeoneerror
la source
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

VolkerK
la source
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.

Tom Hallam
la source
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.

Vinod Kirte
la source
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().

Stefan Gehrig
la source
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[].

rybo111
la source
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.

Jean-Luc Barat
la source