Transformer les éléments d'un tableau

Si vous souhaitez modifier tous les éléments d'un tableau, vous allez faire habituellement :

$numbers = [0, 1, 2, 3, 4];

$numberByTwo = [];
foreach ($numbers as $number) {
    $numberByTwo[] = $number * 2;
}

// $numberByTwo : [0, 2, 4, 6, 8];

Mais savez-vous qu'il existe une fonction faite pour ça ? array_map() permet d'appliquer une fonction (callback) sur tous les éléments d'un tableau.

Elle prend en premier argument la fonction à appliquer sur chaque élément et en deuxième argument, le tableau à traiter.

$numberByTwo = array_map(
    fn($number) => $number * 2,
    $numbers
);

Quelle est donc la meilleure façon de faire ?

La réponse est simple : il n'y a pas de meilleure façon.

J'aime bien utiliser array_map car cette fonction m'évite d'avoir une variable qui "traîne" (déclaration + affectation de chaque valeur). Ici j'ai directement le résultat.

Si j'ai par exemple une fonction qui me fait cette multiplication, alors je n'ai même plus de variable intermédiaire, je peux retourner directement le résultat d'array_map :

function multiplyByTwo(
    array $numbers
): array
{
    return array_map(
      fn($number) => $number * 2,
      $numbers
    );
}

Ca peut paraître un peu compliqué au début, mais on s'y habitue très vite.

Bonus : transposer les colonnes d'un tableau en lignes et les lignes en colonnes

Un exemple tout de suite après ce titre un peu barbare. J'ai ce tableau :

$list = [
    [0,0,1,0],
    [1,1,1,1],
    [1,0,1,1],
];

et je souhaite que les colonnes deviennent des lignes et vice-versa, et donc arriver à ça :

array (
  [0, 1, 1],
  [0, 1, 0],
  [1, 1, 1],
  [0, 1, 1],
)

Je peux le faire très simplement avec array_map, en passant comme callback la valeur null et en utilisant comme deuxième argument le spread operator sur le tableau 🤯

array_map(null, ...$list);

Ne me remerciez pas, vous pourrez désormais frimer en société ^^

Cet article t'a plu ? Si oui, je te propose de t'inscrire à ma dev letter pour recevoir régulièrement dans ta boîte mail mes conseils, mes nouveaux articles, des vidéos à voir, des outils à découvrir et encore bien d’autres choses.

Je m'inscris