Menu

PHP array_column() : extraire une colonne de lignes

array_column($rows, 'email') renvoie le champ email de chaque ligne sous forme de tableau à plat. L'argument de clé d'index, réindexer des lignes par id, l'utiliser avec des objets, et trouver une ligne avec array_search.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

array_column($rows, $column) renvoie la valeur de $column pour chaque ligne d'une liste de lignes. Elle transforme une table d'enregistrements en tableau à plat d'un seul champ, ce dont vous avez besoin avant implode, in_array, array_sum ou array_search.

Les lignes peuvent venir de n'importe où : une réponse JSON décodée, un fichier CSV, ou une requête en base de données qui a renvoyé un tableau de tableaux associatifs.

Utiliser la clé d'index pour construire des paires clé valeur

Le troisième argument désigne un champ dont la valeur devient la clé de chaque résultat. array_column($users, 'name', 'id') est la façon habituelle de construire une table de correspondance id vers nom, par exemple pour une liste <select>.

Si deux lignes partagent la même valeur d'index, la ligne suivante écrase la précédente.

Indexer des lignes entières par id avec null

Passez null comme colonne pour garder chaque ligne complète, réindexée par le champ d'index. Chercher une ligne par id devient alors un accès direct par clé au lieu d'une boucle.

Construisez l'index une fois et chaque recherche ensuite est instantanée, ce qui compte quand vous cherchez beaucoup d'ids dans une boucle.

Trouver une ligne avec array_column et array_search

Pour trouver quelle ligne contient une valeur donnée, cherchez dans la colonne et utilisez la position renvoyée. Vérifiez le résultat avec !== false, car une correspondance dans la première ligne renvoie 0.

Cela suppose que $users a les clés 0, 1, 2, car array_column renvoie une liste. Si le tableau a été filtré et a des trous, appelez d'abord array_values($users). La page array_search détaille le piège false ou 0.

Additionner, compter ou faire la moyenne d'une colonne

array_column s'associe bien aux fonctions mathématiques : extrayez le champ, puis additionnez-le.

Pour une valeur calculée à partir de plusieurs champs, comme quantité fois prix, l'outil est array_map, comme sur la dernière ligne.

array_column avec des objets

Avec une liste d'objets, array_column lit les propriétés publiques. Les propriétés privées et protégées ne lui sont pas visibles.

Le second appel renvoie un tableau vide : password est privée, donc chaque objet est ignoré.

Les lignes sans le champ sont ignorées

array_column ne met pas de valeur de remplacement pour une ligne qui n'a pas le champ. Le résultat peut être plus court que l'entrée, et ses positions ne correspondent alors plus aux lignes.

Le premier résultat contient deux téléphones sans indiquer que Bob n'en avait pas. Avec le nom comme clé d'index, vous voyez à qui appartient chaque numéro, ce qui est la forme la plus sûre chaque fois que certaines lignes peuvent ne pas avoir le champ.

Questions fréquentes

Que fait array_column en PHP ?

Elle prend une liste de lignes (tableaux ou objets) et renvoie la valeur d'un champ de chaque ligne : array_column($users, 'email') donne un tableau à plat d'emails. Les lignes qui n'ont pas ce champ sont ignorées.

Comment créer un tableau clé valeur à partir de lignes ?

Passez le champ de clé en troisième argument : array_column($users, 'name', 'id') renvoie [id => name, ...]. Passez null en second argument, array_column($users, null, 'id'), pour garder les lignes entières indexées par id.

Que fait array_column quand une ligne n'a pas le champ ?

Elle ignore cette ligne, donc array_column($people, 'phone') peut renvoyer moins de valeurs qu'il n'y a de lignes, et les positions ne correspondent plus. Ajoutez une clé d'index, array_column($people, 'phone', 'name'), pour voir de quelle ligne vient chaque valeur.

array_column fonctionne-t-elle avec des objets ?

Oui, avec un tableau d'objets elle lit les propriétés publiques, ainsi que les propriétés rendues accessibles par __get quand la classe définit __isset. Les propriétés privées et protégées sont ignorées.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER