W3docs

list()

La fonction list() en PHP permet d'assigner des valeurs à une liste de variables en une seule opération. Très utilisée pour extraire des valeurs d'un tableau.

Introduction

list() est une construction du langage PHP (et non une fonction) qui déstructure un tableau en assignant chacun de ses éléments à une variable distincte en une seule instruction. Au lieu d'extraire les valeurs index par index, vous décrivez la forme du tableau à gauche et laissez PHP remplir les variables pour vous.

Cette page couvre la syntaxe de base, la forme abrégée moderne [], comment ignorer et imbriquer des éléments, la forme par clé associative (PHP 7.1+), ainsi que les pièges courants à éviter. list() est particulièrement utile lorsqu'une fonction ou une expression retourne déjà un tableau PHP et que vous souhaitez nommer ses parties.

Syntaxe de base

La syntaxe de base de la construction list() est la suivante :

La syntaxe PHP de list()

list($var1, $var2, $var3) = $array;

Le $array du côté droit fournit les valeurs. La construction les assigne aux variables de gauche par position — l'élément 0 va à $var1, l'élément 1 à $var2, et ainsi de suite.

Syntaxe abrégée avec []

Depuis PHP 7.1, vous pouvez utiliser des crochets à la place du mot-clé list(). Les deux formes sont équivalentes — la forme abrégée est désormais le style le plus courant :

<?php

$point = [10, 20];

[$x, $y] = $point;   // same as list($x, $y) = $point;

echo "$x, $y"; // Output: 10, 20

Exemple d'utilisation

Voici un exemple de la façon dont la construction list() peut être utilisée en PHP :

Exemple de list() en PHP

php— editable, runs on the server

Dans cet exemple, la construction list() assigne les valeurs du tableau $fruits aux variables $fruit1, $fruit2 et $fruit3. La valeur de chaque variable est ensuite affichée à l'écran.

Ignorer des éléments

Vous pouvez ignorer les valeurs dont vous n'avez pas besoin en laissant le slot correspondant vide. Seuls les éléments que vous nommez seront assignés :

<?php

$data = ['red', 'green', 'blue', 'yellow'];

// Grab only the third element; skip the rest
list(, , $third) = $data;

echo $third; // Output: blue

Les deux virgules initiales permettent d'ignorer les éléments 0 et 1, de sorte que $third reçoit l'élément 2 ("blue").

Déstructuration imbriquée

list() peut être imbriqué pour décompresser des tableaux multidimensionnels. La structure à gauche doit refléter la structure du tableau à droite :

<?php

$coords = [[1, 2], [3, 4]];

[[$x1, $y1], [$x2, $y2]] = $coords;

echo "$x1,$y1 $x2,$y2"; // Output: 1,2 3,4

Permutation de variables

Puisque le côté droit est entièrement évalué avant l'assignation, list() constitue un moyen propre d'échanger deux variables sans avoir recours à une variable temporaire :

<?php

$a = 'first';
$b = 'second';

[$a, $b] = [$b, $a];

echo "$a $b"; // Output: second first

Utilisation avancée

La construction list() peut également être combinée avec d'autres fonctions PHP pour des tâches plus complexes. Par exemple, elle fonctionne bien avec explode() pour découper une chaîne en tableau :

php— editable, runs on the server

Dans cet exemple, explode() découpe la variable $string en tableau. La construction list() assigne ensuite les valeurs du tableau à $fruit1, $fruit2 et $fruit3. La valeur de chaque variable est alors affichée à l'écran.

De plus, list() prend en charge les tableaux associatifs en faisant correspondre les clés aux variables :

<?php

$person = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];
list('name' => $name, 'age' => $age) = $person;

echo $name; // Output: Alice
echo $age;  // Output: 30

Notez que la forme associative exige que chaque variable spécifie sa clé — vous ne pouvez pas mélanger des entrées par clé et des entrées positionnelles dans le même list(). Cette forme est particulièrement utile lorsque vous travaillez avec des données structurées comme des réponses JSON ou des lignes de base de données.

Déstructuration dans une boucle foreach

list() (ou []) peut se placer directement dans la position valeur d'une boucle foreach, décompressant chaque ligne au fil de l'itération. C'est un schéma courant pour les tableaux de paires ou d'enregistrements :

<?php

$people = [
    ['Alice', 30],
    ['Bob', 25],
];

foreach ($people as [$name, $age]) {
    echo "$name is $age\n";
}
// Output:
// Alice is 30
// Bob is 25

Pièges courants

  • list() ne fonctionne qu'avec des tableaux. Passer une chaîne ou null ne déstructure pas ces valeurs caractère par caractère ; les variables sont simplement mises à null (avec un avertissement pour null).
  • Les éléments manquants donnent null. Si le tableau contient moins d'éléments que de variables, les variables supplémentaires valent null et PHP émet un avertissement Undefined array key. Assurez-vous que le tableau est suffisamment grand, ou utilisez une valeur par défaut avec l'opérateur de fusion null au préalable.
  • L'ordre d'assignation n'est pas garanti. Ne vous fiez pas à l'ordre dans lequel les variables sont assignées au sein d'un seul list() ; n'écrivez jamais de code où une cible dépend d'une autre ayant été assignée en premier dans la même instruction.
  • Vous ne pouvez pas mélanger des entrées avec et sans clé. Dans un même list(), soit toutes les entrées utilisent 'clé' => $var, soit aucune ne le fait.

Bonnes pratiques

  • Utilisez-le pour nommer les parties d'un tableau, pas pour construire des tableaux. list() lit depuis un tableau ; il n'en crée jamais. Recourez à array() / [] lorsque vous devez construire des données.
  • Utilisez des noms de variables significatifs. [$id, $name, $email] = $row; documente la forme de $row bien mieux que $row[0], $row[1], $row[2] dispersés dans votre code.
  • Préférez la syntaxe abrégée [] en PHP 7.1+ pour assurer la cohérence avec les littéraux de tableau que vous écrivez déjà.
  • Utilisez la forme par clé pour les données associatives afin de ne pas dépendre silencieusement de l'ordre d'insertion.

Conclusion

La construction list() (et son équivalent moderne []) vous permet de déstructurer un tableau en variables nommées en une seule instruction expressive — par position, par clé, de façon imbriquée ou à l'intérieur d'un foreach. Utilisez-la pour donner des noms significatifs aux parties des tableaux retournés par des fonctions comme explode(), et gardez les pièges ci-dessus à l'esprit pour que les valeurs manquantes ou mal typées ne vous surprennent pas.

Pratique

Pratique
Quelles sont les façons de créer un tableau indexé en PHP ?
Quelles sont les façons de créer un tableau indexé en PHP ?
Was this page helpful?