Comprendre la fonction PHP array_column()
La fonction PHP array_column() permet d'extraire les valeurs d'une colonne d'un tableau multidimensionnel et de les retourner sous forme de nouveau tableau.
La fonction PHP array_column() extrait les valeurs d'une seule colonne d'un tableau multidimensionnel (ou d'un tableau d'objets) et les retourne sous forme d'un nouveau tableau plat. C'est l'une des fonctions de tableau les plus utiles lorsque vous travaillez avec des données provenant d'une base de données, d'un fichier CSV ou d'une API JSON sous forme de liste d'enregistrements, car elle vous permet de récupérer uniquement le champ qui vous intéresse en une seule ligne — sans écrire de boucle foreach.
Ce chapitre couvre la syntaxe de la fonction, le fonctionnement du paramètre optionnel index_key pour réindexer le résultat, son comportement avec les tableaux d'objets et les clés manquantes, les cas d'utilisation courants, ainsi que les pièges à éviter. Pour plus de contexte, consultez PHP Arrays et Multidimensional Arrays.
Qu'est-ce que la fonction array_column() ?
La fonction array_column() est une fonction intégrée PHP utilisée pour extraire des valeurs d'un tableau et les retourner sous forme d'un nouveau tableau. Elle prend deux paramètres obligatoires : le tableau dont vous souhaitez extraire les valeurs, et la clé (ou colonne) que vous souhaitez extraire. La fonction retourne un nouveau tableau ne contenant que les valeurs de la colonne spécifiée.
Voici la syntaxe de base de la fonction array_column() :
Syntaxe de la fonction PHP array_column
array_column(array, column_key, [index_key]);array: Il s'agit du tableau dont vous souhaitez extraire les valeurs.column_key: Il s'agit de la clé (ou colonne) que vous souhaitez extraire.index_key(optionnel) : Il s'agit de la clé dont la valeur est utilisée comme index (clé) du tableau retourné. Passeznullpourcolumn_key(depuis PHP 7.0) afin de retourner des lignes entières réindexées parindex_key.
La fonction retourne un tout nouveau tableau ; elle ne modifie jamais l'original. Elle fonctionne sur des tableaux dont les éléments sont eux-mêmes des tableaux ou des objets avec des propriétés publiques.
Comment utiliser la fonction array_column() ?
L'utilisation de la fonction array_column() est assez simple. Il vous suffit de passer un tableau et la clé que vous souhaitez extraire. Voici un exemple illustrant comment utiliser array_column() :
Exemple PHP de la fonction array_column
<?php
$data = [
[
'id' => 1,
'name' => 'John',
'age' => 30,
],
[
'id' => 2,
'name' => 'Jane',
'age' => 25,
],
[
'id' => 3,
'name' => 'Jim',
'age' => 35,
],
];
$names = array_column($data, 'name');
print_r($names);
?>Le résultat de ce code serait :
Array
(
[0] => John
[1] => Jane
[2] => Jim
)Dans cet exemple, la fonction array_column() a extrait les valeurs de la colonne name et les a retournées sous forme d'un nouveau tableau indexé numériquement.
Utilisation du paramètre index_key
Le paramètre index_key vous permet de spécifier une clé à utiliser comme index du tableau retourné. Voici un exemple illustrant comment utiliser le paramètre index_key :
Exemple de la fonction PHP array_column avec plusieurs arguments
<?php
$data = [
[
'id' => 1,
'name' => 'John',
'age' => 30,
],
[
'id' => 2,
'name' => 'Jane',
'age' => 25,
],
[
'id' => 3,
'name' => 'Jim',
'age' => 35,
],
];
$names = array_column($data, 'name', 'id');
print_r($names);
?>Le résultat de ce code serait :
Array
(
[1] => John
[2] => Jane
[3] => Jim
)Dans cet exemple, array_column() a extrait les valeurs de la colonne name et a utilisé la colonne id comme clé de chaque entrée du tableau retourné. C'est la façon la plus rapide de construire une table de correspondance indexée par ID.
Retourner des lignes entières avec un column_key null
Depuis PHP 7.0, vous pouvez passer null comme column_key. La fonction conserve alors chaque ligne entière mais réindexe le résultat par index_key. C'est pratique lorsque vous souhaitez une correspondance enregistrement-par-ID plutôt qu'un seul champ :
<?php
$data = [
['id' => 1, 'name' => 'John', 'age' => 30],
['id' => 2, 'name' => 'Jane', 'age' => 25],
];
$byId = array_column($data, null, 'id');
print_r($byId);
?>Travailler avec des tableaux d'objets
array_column() lit également les propriétés publiques des objets, vous pouvez donc l'utiliser sur une liste d'instances de modèle exactement comme vous le feriez avec des tableaux :
<?php
class User {
public function __construct(public int $id, public string $name) {}
}
$users = [
new User(1, 'John'),
new User(2, 'Jane'),
];
print_r(array_column($users, 'name', 'id'));
?>Pièges à éviter
- Les clés manquantes sont ignorées silencieusement. Si une ligne ne contient pas
column_key, cette ligne est simplement omise du résultat — aucun avertissement n'est émis. De même, une ligne dont l'index_keyest absente revient à une clé numérique séquentielle. - Les valeurs
index_keyen double s'écrasent mutuellement. Les clés étant uniques, si deux lignes partagent le mêmeindex_key, seule la dernière survivra. - Seules les propriétés publiques des objets sont lues. Les propriétés protégées et privées sont ignorées, à moins que la classe n'implémente des accesseurs magiques.
Cas d'utilisation de array_column()
La fonction array_column() peut être utilisée dans diverses situations où vous devez extraire des valeurs de tableaux et les retourner sous forme d'un nouveau tableau. Voici quelques cas d'utilisation courants :
- Extraire des valeurs de tableaux multidimensionnels pour créer une liste simple
- Créer un tableau associatif à partir d'un tableau multidimensionnel
- Transformer un tableau multidimensionnel en tableau unidimensionnel pour une utilisation dans une liste déroulante ou un autre élément de formulaire
Si vous avez également besoin de transformer chaque valeur lors de son extraction, utilisez array_map() ; pour ne conserver que les lignes correspondant à une condition, consultez array_filter().
Conclusion
La fonction array_column() est un outil concis pour extraire une seule colonne de tableaux multidimensionnels et de tableaux d'objets. Avec l'index_key optionnel, vous pouvez réindexer le résultat en une seule étape, et avec un column_key null, vous pouvez construire des correspondances d'enregistrements complets. L'utiliser à la place d'une boucle foreach écrite à la main rend le code de mise en forme des données plus court et plus facile à lire.