Menu

PHP array_map() : appliquer une fonction à chaque élément

array_map($callback, $array) appelle le callback sur chaque élément et renvoie un nouveau tableau avec les résultats. Fonctions fléchées, clés, plusieurs tableaux à la fois, et quand array_walk ou foreach conviennent mieux.

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

array_map($callback, $array) appelle $callback sur chaque élément de $array et renvoie un nouveau tableau avec les résultats. Le callback vient en premier, le tableau en second, et le tableau d'origine n'est pas modifié.

fn($p) => $p * 1.2 est une fonction fléchée : une fonction d'une seule expression qui renvoie son résultat. N'importe quel callable fonctionne à sa place.

Utiliser une fonction native comme callback

Passez le nom d'une fonction native sous forme de chaîne. C'est la façon la plus courte de nettoyer tout un tableau : appliquer trim à chaque valeur, convertir des chaînes en entiers ou changer la casse.

array_map('intval', ...) est la façon habituelle de transformer les chaînes d'un formulaire ou d'explode() en vrais entiers. Vous pouvez aussi écrire intval(...), la syntaxe de callable de première classe de PHP 8.1, que votre éditeur peut compléter et vérifier.

Utiliser une closure avec des variables extérieures

Une fonction fléchée voit automatiquement les variables qui l'entourent. Une function classique a besoin de use pour les importer. Les deux sont expliquées sur la page des fonctions anonymes.

array_map avec les clés

Avec un seul tableau, array_map garde les clés, y compris les clés de type chaîne. Mais le callback ne reçoit que la valeur. Pour obtenir aussi la clé, passez array_keys($array) comme second tableau : le callback est alors appelé avec un élément de chaque tableau.

Remarquez le second résultat : dès que vous passez plus d'un tableau, les clés sont remplacées par 0, 1, 2. C'est pourquoi la dernière ligne utilise array_combine() pour les reconstruire.

Mapper plusieurs tableaux à la fois

Chaque tableau supplémentaire devient un argument supplémentaire du callback, associé par position. Si les tableaux n'ont pas la même longueur, les plus courts sont complétés par null.

Passer null comme callback saute la fonction et assemble les tableaux par paires :

array_map, array_walk ou foreach

array_map construit un nouveau tableau. array_walk modifie le tableau que vous passez, via une référence, et donne la clé au callback en second argument. Un foreach fait l'un ou l'autre et peut aussi sauter des éléments ou s'arrêter tôt avec break.

Utilisez array_map quand chaque élément devient exactement un nouvel élément. Si vous devez aussi écarter certains éléments, combinez-la avec array_filter, ou écrivez un foreach.

Erreur fréquente : l'ordre des arguments

array_map prend le callback en premier et le tableau en second. Sa voisine array_filter les prend dans l'autre ordre, ce qui se confond facilement :

array_map($callback, $array);     // callback first
array_filter($array, $callback);  // array first

Les inverser fait lever une TypeError à PHP 8, car un simple tableau n'est pas un callback valide :

PHP s'arrête avec :

PHP Fatal error:  Uncaught TypeError: array_map(): Argument #1 ($callback) must be a valid callback or null, array callback must have exactly two members in /home/index.php:4

Remettez les deux arguments dans l'ordre et le bloc s'exécute.

Questions fréquentes

Que fait array_map en PHP ?

Elle appelle une fonction sur chaque élément d'un tableau et renvoie un nouveau tableau avec les résultats : array_map(fn($n) => $n * 2, [1, 2, 3]) renvoie [2, 4, 6]. Le tableau d'origine n'est pas modifié.

array_map garde-t-elle les clés ?

Avec un seul tableau, oui : les clés de type chaîne et entières sont gardées telles quelles. Avec deux tableaux ou plus, le résultat reçoit toujours de nouvelles clés 0, 1, 2....

Comment obtenir la clé dans le callback d'array_map ?

Passez les clés comme second tableau : array_map(fn($k, $v) => "$k=$v", array_keys($arr), $arr). Le résultat est une liste, donc entourez-le d'array_combine(array_keys($arr), ...) si vous avez besoin de retrouver les clés d'origine.

array_map est-elle plus rapide que foreach ?

Pas de façon notable. Les deux parcourent le tableau une fois, et un foreach simple est souvent un peu plus rapide car il évite un appel de fonction par élément. Choisissez array_map quand elle se lit mieux : une transformation qui produit un nouveau tableau.

Quelle est la différence entre array_map et array_walk ?

array_map renvoie un nouveau tableau et laisse l'entrée intacte. array_walk renvoie true et sert à modifier le tableau sur place via un paramètre par référence : array_walk($arr, function (&$v, $k) { $v = trim($v); });.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER