La magie du conteneur vide : comment faire travailler PHP pour vous
\n\nImaginez : 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\nDans 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 !
La question la plus fréquente : comment ajouter un élément ?
\n\nSi 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\nCe code affichera :
\n\nArray\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 [].
L'opérateur $arr[] = $value : rapide et élégant
\n\nLorsque 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).
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
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.
array_push() : quand ajouter plusieurs éléments à la fois
\n\nLa deuxième méthode populaire est la fonction array_push() :
<?php\n$myArray = [];\narray_push($myArray, 'premier', 'deuxième', 'troisième');\nprint_r($myArray);\n?>\n\nLe 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_insertpour 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
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 [].
Tableau vide et clés : que faire si les clés ne sont pas numériques ?
\n\nQue 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\nIci 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.
Mais attention : si vous écrivez accidentellement $user[] = 'valeur' à côté d'un tableau associatif, PHP ajoutera une clé numérique