Ajouter des éléments à un tableau vide PHP : ce qui se passe "sous le capot"

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

La magie du conteneur vide : comment faire travailler PHP pour vous

\n\n

Imaginez : vous écrivez un script PHP et devez collecter des données — par exemple, les ID de produits d'un panier. Vous créez un tableau vide, puis vous y ajoutez des éléments dans une boucle. Rien de plus simple, non ? Pourtant, c'est précisément cette étape — l'ajout d'éléments à un tableau vide PHP — qui génère des milliers de questions sur Stack Overflow. Pourquoi ? Parce que les débutants confondent souvent la syntaxe, tandis que les développeurs expérimentés veulent comprendre ce qui se passe « sous le capot ».

\n\n

Dans cet article, nous ne nous contenterons pas de montrer comment écrire du code correctement. Nous plongerons dans le cœur de PHP (Zend Engine), analyserons la différence entre $arr[] = $value et array_push(), et découvrirons les surprises que nous réserve PHP 8.1. Prêt ? C'est parti !

\n\n

La question la plus fréquente : comment ajouter un élément ?

\n\n

Si vous êtes débutant, la première chose qui vous vient à l'esprit est probablement d'écrire quelque chose comme :

\n\n
<?php\n$myArray = array(); // tableau vide\n$myArray[] = 'premier élément';\n$myArray[] = 'deuxième élément';\nprint_r($myArray);\n?>
\n\n

Ce code affichera :

\n\n
Array\n(\n    [0] => premier élément\n    [1] => deuxième élément\n)
\n\n

Ça marche ? Oui. Mais pourquoi ? Décortiquons ce que fait réellement l'opérateur [].

\n\n

L'opérateur $arr[] = $value : rapide et élégant

\n\n

Lorsque vous écrivez $arr[] = $value, PHP n'appelle aucune fonction. Au lieu de cela, il accède directement à la structure de données interne du tableau (zend_array dans le jargon Zend Engine).

\n\n

Ce qui se passe sous le capot :

\n
    \n
  • PHP vérifie si le tableau existe. Si ce n'est pas le cas, il en crée un nouveau (mais il est toujours préférable de l'initialiser explicitement : $arr = []).
  • \n
  • Il ajoute l'élément à la fin du tableau, en lui attribuant automatiquement la clé numérique suivante (0, 1, 2...).
  • \n
  • Si le tableau était vide, le premier élément reçoit la clé 0.
  • \n
  • Aucun surcoût lié à l'appel d'une fonction. C'est la méthode la plus performante.
  • \n
\n\n

Conseil : utilisez $arr[] = ... chaque fois que vous devez simplement ajouter un élément à la fin. C'est rapide, lisible et ne nécessite pas d'importer de fonctions.

\n\n

array_push() : quand ajouter plusieurs éléments à la fois

\n\n

La deuxième méthode populaire est la fonction array_push() :

\n\n
<?php\n$myArray = [];\narray_push($myArray, 'premier', 'deuxième', 'troisième');\nprint_r($myArray);\n?>
\n\n

Le résultat sera le même. Mais il y a des nuances :

\n
    \n
  • array_push() prend le tableau par référence et ajoute toutes les valeurs passées à la fin.
  • \n
  • Elle retourne le nouveau nombre d'éléments dans le tableau (depuis PHP 7.3).
  • \n
  • Sous le capot : la fonction appelle la procédure interne zend_hash_next_index_insert pour chaque élément. Cela signifie que si vous ajoutez un seul élément, array_push() est légèrement plus lent que $arr[] = ... en raison du surcoût de l'appel de fonction.
  • \n
\n\n

Quand l'utiliser : uniquement si vous devez ajouter plusieurs éléments à la fois (2 ou plus). Pour un seul élément — oubliez array_push, utilisez [].

\n\n

Tableau vide et clés : que faire si les clés ne sont pas numériques ?

\n\n

Que faire si vous voulez ajouter un élément avec une clé spécifique ? Par exemple, un tableau associatif :

\n\n
<?php\n$user = [];\n$user['name'] = 'Jean';\n$user['age'] = 30;\n?>
\n\n

Ici aussi, c'est simple. L'opérateur [] avec une clé entre crochets ($arr['key'] = value) fonctionne comme une affectation. Si la clé n'existe pas, elle est créée. Si elle existe, elle est écrasée.

\n\n

Mais attention : si vous écrivez accidentellement $user[] = 'valeur' à côté d'un tableau associatif, PHP ajoutera une clé numérique

Blogs

Book Recommendations