Insérer un élément dans un tableau PHP : fonctionnement interne

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

Insérer un élément dans un tableau PHP : plongeons sous le capot

\n\n

Imaginez : vous écrivez un script PHP pour une boutique en ligne. Un nouveau produit arrive et doit être placé exactement entre « Smartphones » et « Ordinateurs portables ». Ou vous analysez des données et devez insérer une ligne au milieu d'un CSV. Une situation familière ? La question « Insert new item in array on any position in PHP » a cumulé des milliers de vues sur Stack Overflow. Et ce n'est pas étonnant : PHP n'a pas de fonction intégrée « insère un élément par index ». En revanche, il dispose d'une boîte à outils puissante pour le faire élégamment et efficacement. Découvrons comment cela fonctionne sous le capot.

\n\n

Pourquoi PHP n'a-t-il pas de simple fonction insert() ?

\n\n

Contrairement à JavaScript (avec splice()) ou Python (list.insert()), les tableaux PHP sont hybrides : ils sont à la fois une liste et une table de hachage. Lorsque vous insérez un élément au milieu, PHP ne se contente pas de déplacer des pointeurs, il doit restructurer la structure de données interne. C'est pourquoi les développeurs n'ont pas ajouté de méthode homonyme, mais ont fourni un outil universel — array_splice(). Il résout 99 % des problèmes, mais il est crucial de comprendre sa logique « sous le capot ».

\n\n

La méthode la plus correcte : array_splice()

\n\n

C'est le héros principal de notre article. La fonction array_splice() non seulement supprime une partie du tableau, mais peut aussi insérer de nouveaux éléments à leur place. Et ce, sans créer un nouveau tableau — les modifications se font « in place » (par référence).

\n\n
<?php\n$fruits = ['pomme', 'banane', 'cerise', 'datte'];\n// Insère 'raisin' à la position 2 (après 'banane')\narray_splice($fruits, 2, 0, 'raisin');\nprint_r($fruits);\n// Résultat : ['pomme', 'banane', 'raisin', 'cerise', 'datte']\n?>
\n\n

Syntaxe : array_splice(&$array, $offset, $length, $replacement). Le troisième paramètre ($length) est à zéro — cela signifie que nous ne supprimons rien, nous insérons simplement. Le quatrième paramètre peut être un seul élément ou un tableau d'éléments.

\n\n

Sous le capot : Lorsque vous appelez array_splice() avec une longueur nulle, PHP effectue les opérations suivantes :

\n
    \n
  • Il trouve le pointeur interne à la position $offset.
  • \n
  • Il écarte le tableau : tous les éléments de la position à la fin sont décalés vers la droite.
  • \n
  • Il insère le nouvel élément (ou les éléments) dans l'espace libéré.
  • \n
  • Il réindexe les clés numériques (si elles existent).
  • \n
\n\n

Important : cette opération s'exécute en O(n) — plus le tableau est grand et plus l'insertion est proche du début, plus il faudra décaler d'éléments. Pour 99 % des applications web, cela est imperceptible, mais si vous travaillez avec des tableaux d'un million d'entrées, il vaut la peine d'envisager des alternatives.

\n\n

Insertion de plusieurs éléments

\n\n

Vous voulez insérer trois éléments à la fois ? Transmettez simplement un tableau :

\n\n
<?php\n$colors = ['rouge', 'vert', 'bleu'];\narray_splice($colors, 1, 0, ['jaune', 'violet', 'orange']);\nprint_r($colors);\n// ['rouge', 'jaune', 'violet', 'orange', 'vert', 'bleu']\n?>
\n\n

Remarque : le tableau d'insertion ne devient pas imbriqué — ses éléments sont « décompressés » et placés séquentiellement.

\n\n

Insertion manuelle : quand array_splice ne convient pas

\n\n

Parfois, vous devez conserver le tableau d'origine intact. Ou vous souhaitez insérer un élément sans modifier les données sources. C'est là que array_slice() et une simple copie viennent à la rescousse.

\n\n
<?php\nfunction insererDansTableau(array $original, int $position, mixed $element): array\n{\n    $avant = array_slice($original, 0, $position);\n    $apres  = array_slice($original, $position);\n    return array_merge($avant, [$element], $apres);\n}\n\n$arr = ['a', 'b', 'c', 'd'];\n$nouveauArr = insererDansTableau($arr, 2, 'X');\nprint_r($nouveauArr); // ['a', 'b', 'X', 'c', 'd']\n// $arr reste inchangé\n?>
\n\n

Que se passe-t-il sous le capot ? array_slice() crée deux nouveaux tableaux — c'est une copie

Blogs

Book Recommendations