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é ^^

Vous aimeriez progresser en PHP ? Mais vous ne savez pas comment vous y prendre ?

S'entraîner pour progresser en PHP

Mon programme "S'entraîner pour progresser en PHP" est disponible. Il vous permettra de recevoir chaque semaine un kata de code directement dans votre boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives et des défis supplémentaires.

Reçois dès maintenant un kata gratuit en cliquant sur le bouton ci-dessous.