Différence entre array_push () et $ array [] =


117

Dans le manuel PHP, ( array_push ) dit ..

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.

Par exemple :

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

contre

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

Je ne comprends pas pourquoi il y a une grande différence.


8
L'un est un appel de fonction, l'autre non. Exactement ce qui est mentionné dans la boîte.
KingCrunch

1
L'un est l'appel de fonction comme mentionné ci-dessus qui signifie l'utilisation de certaines ressources pour basculer le contrôle vers / depuis l'appel de fonction (ce qui a entraîné un traitement supplémentaire). Alors que, plus tard, il suffit d'assigner un nouvel élément dans le tableau immédiatement.
Ghazanfar Mir

2
cette question m'a fait gagner beaucoup de temps en poussant vers les tableaux :)
RozzA

Réponses:


151

Lorsque vous appelez une fonction en PHP (comme array_push()), il y a des frais généraux à l'appel, car PHP doit rechercher la référence de la fonction, trouver sa position en mémoire et exécuter le code qu'il définit.

L'utilisation $arr[] = 'some value';ne nécessite pas d'appel de fonction et implémente l'ajout directement dans la structure de données. Ainsi, lorsque vous ajoutez beaucoup de données, leur utilisation est beaucoup plus rapide et économe en ressources $arr[].


3
et si une telle notation "$ arr [] = 'une valeur';" se résume à l'appel de la fonction?
Tebe

1
@gekannt Comment cela se passerait-il? Voulez-vous dire si «une valeur» dans votre commentaire est une clôture? Cela stockerait la référence de la fermeture dans le tableau. Si vous voulez dire que "une valeur" est une fonction qui est appelée, cela ajouterait tout ce que cette fonction renvoie.
Kirkland

Les opérateurs @Kirkland ne sont que des fonctions avec une syntaxe alternative dans la plupart des langages de type C, je ne suis pas un expert PHP, mais je peux imaginer qu'ils ont implémenté les opérateurs de la même manière puisque c'est un dialecte C.
Kevin le

1
@Kevin: tu es d'accord avec toi et je suis presque sûr qu'il y a une fonction derrière la syntaxe alternative ce n'est pas celle mentionnée ci-dessus car je vois le commentaire suivant dans la documentation php: "Si vous utilisez array_push () pour ajouter un élément pour le 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. " pas le temps maintenant de voir exactement ce qu'il y a derrière car le terme de recherche est un peu déroutant pour les moteurs de recherche :)
jnhghy - Alexandru Jantea

Existe-t-il des preuves concrètes qui $arr[] = valuesont plus rapides? Essayer d'imaginer pourquoi le compilateur traiterait le code différemment.
c ..

44

Vous pouvez ajouter plus d'un élément d'un coup au tableau en utilisant array_push,

par exemple array_push($array_name, $element1, $element2,...)

Où $ element1, $ element2, ... sont des éléments à ajouter au tableau.

Mais si vous voulez ajouter un seul élément à la fois, alors une autre méthode (c'est-à-dire en utilisant $ array_name []) devrait être préférée.


Est-ce une mauvaise pratique de combiner les deux au besoin tout au long d'un projet?
PBwebD

1
@ testing123 Absolument pas. C'est une bonne pratique d'utiliser la solution la plus efficace disponible à portée de main, à moins qu'elle ne paralyse gravement la lisibilité, la compatibilité, etc. (ou si vous devez obéir à certains guides de style).
Chris Kraszewski

15

La différence est dans la ligne ci-dessous à "parce que de cette façon, il n'y a pas de surcharge pour appeler une fonction."

array_push()lèvera un avertissement si le premier argument n'est pas un tableau. Cela diffère du $var[]comportement où un nouveau tableau est créé.


4
Je n'ai pas dit que c'était une raison. Dans la question, la différence a été posée et c'est aussi la différence
Baig

7

Vous devez toujours utiliser $array[]si possible car, comme l'indique la boîte, il n'y a pas de surcharge pour l'appel de fonction. C'est donc un peu plus rapide que l'appel de fonction.


4

array_push - Pousse un ou plusieurs éléments à la fin du tableau

Prenez note des mots " un ou plusieurs éléments à la fin " pour le faire en utilisant, $arr[]vous devrez obtenir la taille maximale du tableau


Re "pour faire cela en utilisant $ arr [] vous devrez obtenir la taille maximale du tableau" . Non, vous confondez $arr[...index...] = $value;avec ce qui est discuté ici, c'est-à-dire $arr[] = $value;. Pas besoin de connaître la taille ou le tableau, pour pousser sur la fin. Plusieurs éléments seraient simplement plusieurs appels: $arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
ToolmakerSteve

2

expliquer: 1. le premier déclare la variable dans le tableau.

2. la deuxième méthode array_push est utilisée pour pousser la chaîne dans la variable array.

3. finalement, il imprimera le résultat.

4. la deuxième méthode consiste à stocker directement la chaîne dans le tableau.

5. les données sont imprimées dans les valeurs du tableau en utilisant la méthode print_r.

ces deux sont identiques


1

les deux sont identiques, mais array_push fait une boucle dans son paramètre qui est un tableau et exécute $ array [] = $ element


0

Je sais que c'est une vieille réponse, mais il pourrait être utile pour les autres de savoir qu'une autre différence entre les deux est que si vous devez ajouter plus de 2/3 valeurs par boucle à un tableau, il est plus rapide à utiliser:

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

au lieu de:

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

edit- J'ai oublié de fermer le crochet pour le forconditionnel


1
Je me demande comment cela se compare à array_merge. Par exemple for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }. Je suppose que array_push est encore légèrement plus rapide que cela.
ToolmakerSteve

0

Personne n'a dit, mais array_push pousse seulement un élément vers la FIN DU TABLEAU, où $ array [index] peut insérer une valeur à n'importe quel index donné. Grande différence.


La question était la "Différence entre array_push () et $ array [] =" ce que j'ai dit est une différence. Un gros!
Marco

1
Je suis respectueusement en désaccord. Vous décrivez $array[index] = , ce qui est une opération différente de $array[] = .... La question donne deux morceaux de code et demande pourquoi il y aurait une différence [de performance] significative entre eux. La question signifie littéralement $array[] = ..., qui est un idiome php spécifique, qui n'implique pas d'index. array + index résout un problème différent, produit un code différent et constitue un compromis différent.
ToolmakerSteve
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.