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): arrayChaque 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()
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 écrivezcompact('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
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"), pascompact($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+). Utilisezisset()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, consultezget_defined_vars().
Fonctions associées
extract()— l'inverse decompact(): 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.