W3docs

La fonction PHP compact() pour les tableaux

Apprenez comment la fonction compact() de PHP construit un tableau associatif à partir de variables existantes, avec syntaxe, exemples et pièges courants.

Qu'est-ce que la fonction PHP compact() ?

compact() est une fonction PHP intégrée qui construit un tableau associatif à partir de variables existantes. Vous lui passez les noms des variables (sous forme de chaînes), et elle retourne un tableau dont les clés sont ces noms et dont les valeurs sont les valeurs actuelles des variables. C'est l'inverse de extract(), qui retransforme un tableau en variables individuelles.

Cette page couvre la syntaxe, la manière dont compact() résout les noms de variables, le passage de noms sous forme de tableau, ce qui se passe avec les valeurs null et les variables non définies, ainsi qu'un cas d'utilisation réel courant.

Syntaxe

compact(string|array ...$var_names): array

Chaque argument est soit une string contenant un nom de variable, soit un array de telles strings. compact() retourne le tableau associatif résultant.

Comment ça fonctionne ?

compact() recherche dans la portée courante chaque nom que vous lui fournissez. Si une variable portant ce nom existe, elle est ajoutée au résultat (le nom devient la clé, la valeur de la variable devient la valeur) — même si la valeur est null. Si aucune variable de ce nom n'existe, ce nom est ignoré, et PHP 8.0+ émet un avertissement ("Undefined variable").

Voici le cas le plus simple :

Exemple basique de compact()

php— editable, runs on the server

Nous créons trois variables et passons leurs noms à compact(). Le tableau résultant ressemble à ceci :

Array (
  [name] => John
  [age] => 30
  [city] => New York
)

Notez que vous passez les noms sans le $ initial — "name", pas $name.

Pourquoi utiliser compact() ?

  • Moins de répétition : Au lieu d'écrire ['name' => $name, 'age' => $age, 'city' => $city], vous écrivez compact('name', 'age', 'city'). La clé et le nom de la variable restent synchronisés automatiquement.
  • Lisibilité : Lorsque la clé du tableau et la variable partagent déjà un nom, compact() supprime le bruit visuel lié à la duplication de chacun.
  • Moins de fautes de frappe : Écrire les paires clé-valeur à la main rend facile de mal taper une clé. Avec compact(), la clé est dérivée du nom de la variable.

Exemples

Inclure une variable avec une valeur null

php— editable, runs on the server

Ici, $state est défini mais contient null. Comme la variable existe, elle est quand même incluse — sa valeur dans le tableau est null (que print_r affiche comme une valeur vide) :

Array (
  [name] => John
  [age] => 30
  [city] => New York
  [state] => 
)

Un nom sans variable correspondante dans la portée est un cas différent : il est complètement ignoré (et PHP 8.0+ génère un avertissement). Ainsi, compact('name', 'missing') retourne uniquement ['name' => 'John'].

Passer les noms sous forme de tableau

N'importe quel argument peut lui-même être un array de noms, que compact() aplatit. C'est pratique lorsque la liste des champs est construite dynamiquement :

<?php

  $name = "John";
  $age  = 30;
  $city = "New York";

  $fields = ["name", "age"];
  $myArray = compact("city", $fields);

  print_r($myArray);

?>
Array (
  [city] => New York
  [name] => John
  [age] => 30
)

Cas d'utilisation réel : passer des données à un template

compact() excelle lorsque vous souhaitez transmettre à une vue ou à un template un ensemble de valeurs nommées sans construire le tableau à la main :

<?php

  function renderProfile() {
    $username = "jdoe";
    $role     = "admin";
    $isActive = true;

    // Pass all three as a tidy associative array
    return compact("username", "role", "isActive");
  }

  print_r(renderProfile());

?>
Array (
  [username] => jdoe
  [role] => admin
  [isActive] => 1
)

Conseils et pièges

  • Passez les noms de variables sans le signe $ : compact("name"), pas compact($name).
  • compact() lit uniquement la portée courante — à l'intérieur d'une fonction, elle voit les variables locales de cette fonction, pas les variables globales.
  • Elle inclut les variables dont la valeur est null, mais ignore les noms sans variable correspondante (avertissement en PHP 8.0+). Utilisez isset() ou définissez la variable d'abord si vous avez besoin qu'elle soit présente.
  • Pour faire l'inverse — transformer un tableau en variables — utilisez extract(). Pour inspecter les variables existantes dans la portée, consultez get_defined_vars().

Fonctions associées

  • extract() — l'inverse de compact() : importe les clés d'un tableau comme variables.
  • get_defined_vars() — retourne toutes les variables définies dans la portée courante.
  • Tableaux associatifs — le type de tableau que compact() produit.

Pratique

Pratique
Quel est le rôle de la fonction 'compact()' en PHP ?
Quel est le rôle de la fonction 'compact()' en PHP ?
Was this page helpful?