range()
La fonction PHP range() génère un tableau contenant une séquence d'éléments entre une valeur de début et une valeur de fin, avec un pas optionnel.
Introduction
range() est une fonction PHP intégrée qui construit un tableau contenant une séquence d'éléments allant d'une valeur de début à une valeur de fin. Au lieu d'écrire une boucle pour insérer des nombres ou des lettres dans un tableau un par un, vous décrivez les bornes (et éventuellement un pas) et PHP remplit tout ce qui se trouve entre les deux.
Cette page couvre la syntaxe, tous les types de séquences que vous pouvez générer (croissante, décroissante, entiers, flottants et caractères), les pièges courants, et les cas d'utilisation réels de range().
Syntaxe
range(string|int|float $start, string|int|float $end, int|float $step = 1): arrayOù :
$start: La première valeur de la séquence.$end: La dernière valeur de la séquence.$step: Facultatif. La valeur ajoutée entre chaque élément. La valeur par défaut est1. Ce doit être un nombre positif —range()détermine la direction à partir de$startet$end, et non du signe du pas.
Deux points importants à retenir dès le départ :
- Les deux bornes sont incluses.
range(0, 5)retourne six éléments (0à5), et non cinq. - Le résultat est toujours un nouveau tableau indexé à zéro — les clés sont
0, 1, 2, …quelles que soient les valeurs contenues.
Exemples
Générer des nombres de 0 à 5
L'appel le plus simple prend un début et une fin. Notez que 5 est inclus dans le résultat :
Résultat :
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)Utiliser des nombres négatifs
$start et $end peuvent être négatifs, et la séquence progresse toujours par pas de 1 :
Résultat :
Array
(
[0] => -5
[1] => -4
[2] => -3
[3] => -2
[4] => -1
[5] => 0
[6] => 1
[7] => 2
[8] => 3
[9] => 4
[10] => 5
)Sauter des valeurs
Le troisième argument définit l'incrément. Ici, il est de 2, donc seuls les nombres pairs sont produits :
Résultat :
Array
(
[0] => 0
[1] => 2
[2] => 4
[3] => 6
[4] => 8
[5] => 10
)Générer une séquence de caractères
Lorsque $start et $end sont des caractères uniques, range() parcourt l'alphabet entre eux. C'est pratique pour construire des menus A–Z, des étiquettes de colonnes ou des données de test :
Résultat :
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
[8] => i
[9] => j
[10] => k
[11] => l
[12] => m
[13] => n
[14] => o
[15] => p
[16] => q
[17] => r
[18] => s
[19] => t
[20] => u
[21] => v
[22] => w
[23] => x
[24] => y
[25] => z
)Compter à rebours avec une séquence décroissante
Si $start est supérieur à $end, range() compte à rebours automatiquement. Vous ne passez pas un pas négatif — le pas reste positif :
<?php
$countdown = range(5, 1);
print_r($countdown);Résultat :
Array
(
[0] => 5
[1] => 4
[2] => 3
[3] => 2
[4] => 1
)Utiliser un pas flottant
Le pas peut être un flottant, ce qui permet de construire des séquences fractionnaires — utiles pour des curseurs, des axes de graphiques ou des valeurs échantillonnées :
<?php
$fractions = range(0, 1, 0.25);
print_r($fractions);Résultat :
Array
(
[0] => 0
[1] => 0.25
[2] => 0.5
[3] => 0.75
[4] => 1
)Pièges courants
- La séquence est inclusive.
range(1, 3)donne[1, 2, 3]. Si vous attendiez un résultat de longueur$end, vous serez décalé d'une unité. - Gardez le pas positif. La direction vient de l'ordre de
$startet$end. Passer un pas négatif (par exemplerange(0, 5, -1)) est une erreur — les anciennes versions de PHP émettaient un avertissement, tandis que PHP 8.3+ lève uneValueError. Un pas de0est également invalide. - Le dernier élément peut être ignoré.
range(0, 10, 3)produit[0, 3, 6, 9]—10n'est pas atteignable depuis0par pas de3, donc la séquence s'arrête à la dernière valeur qui tient. - Les flottants peuvent être imprécis. Comme les nombres en virgule flottante ne peuvent pas représenter exactement toutes les décimales, un pas comme
0.1peut ne pas atterrir sur la valeur attendue. Arrondissez les résultats, ou itérez sur des entiers et divisez ensuite, quand la précision est importante. - La mémoire croît avec la taille.
range(0, 1000000)construit un tableau d'un million d'éléments en mémoire. Si vous avez seulement besoin d'itérer, une boucleforouSplFixedArrayévite cette allocation.
Quand utiliser range()
range() est idéal lorsque vous avez besoin d'une séquence prête à l'emploi plutôt que d'un conteneur vide :
- Piloter une boucle. Combinez-le avec
foreachpour itérer sur une plage fixe :foreach (range(1, 12) as $month) { … }. - Construire des listes d'options — années, jours du mois, ou lettres
A–Zpour une liste déroulante. - Associer avec
array_map()pour transformer chaque valeur, par exemplearray_map(fn($n) => $n * $n, range(1, 5))pour obtenir des carrés.
Si vous souhaitez plutôt un tableau contenant la même valeur répétée, utilisez array_fill() plutôt que range(). Pour en savoir plus sur les tableaux en général, consultez le guide PHP arrays.
Résumé
range() crée un tableau indexé à zéro de valeurs séquentielles entre deux bornes. Elle fonctionne avec des entiers, des flottants et des caractères, compte dans les deux sens, et accepte un pas optionnel. N'oubliez pas que les deux bornes sont inclusives, que le pas est toujours positif, et que les grandes séquences allouent de la mémoire réelle — ce qui en fait l'une des fonctions les plus pratiques de PHP.