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
);
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.
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é ^^
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.