range()
La función range() de PHP genera un array con una secuencia de elementos entre un valor inicial y uno final, con paso opcional.
Introducción
range() es una función integrada de PHP que construye un array con una secuencia de elementos desde un valor inicial hasta un valor final. En lugar de escribir un bucle para agregar números o letras a un array uno a uno, describes los extremos (y opcionalmente un paso) y PHP rellena todo lo que hay en medio.
Esta página cubre la sintaxis, cada tipo de rango que puedes generar (ascendente, descendente, enteros, flotantes y caracteres), los errores comunes que suelen cometerse y dónde encaja range() en el código real.
Sintaxis
range(string|int|float $start, string|int|float $end, int|float $step = 1): arrayDonde:
$start: El primer valor de la secuencia.$end: El último valor de la secuencia.$step: Opcional. La cantidad que se suma entre valores. El valor predeterminado es1. Debe ser un número positivo —range()determina la dirección a partir de$starty$end, no del signo del paso.
Dos cosas que vale la pena memorizar desde el principio:
- Ambos extremos están incluidos.
range(0, 5)devuelve seis elementos (0al5), no cinco. - El resultado siempre es un nuevo array indexado desde cero — las claves son
0, 1, 2, …independientemente de los valores que contenga.
Ejemplos
Generar números del 0 al 5
La llamada más simple toma un inicio y un fin. Observa que 5 está incluido en el resultado:
Salida:
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)Usar números negativos
$start y $end pueden ser negativos, y la secuencia sigue avanzando de 1 en 1:
Salida:
Array
(
[0] => -5
[1] => -4
[2] => -3
[3] => -2
[4] => -1
[5] => 0
[6] => 1
[7] => 2
[8] => 3
[9] => 4
[10] => 5
)Saltar valores
El tercer argumento establece el incremento. Aquí es 2, por lo que solo se producen números pares:
Salida:
Array
(
[0] => 0
[1] => 2
[2] => 4
[3] => 6
[4] => 8
[5] => 10
)Generar un rango de caracteres
Cuando $start y $end son caracteres individuales, range() recorre el alfabeto entre ellos. Esto es útil para construir menús de A a Z, etiquetas de columnas o datos de prueba:
Salida:
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
)Contar hacia atrás con un rango descendente
Si $start es mayor que $end, range() cuenta hacia atrás automáticamente. No debes pasar un paso negativo — el paso debe permanecer positivo:
<?php
$countdown = range(5, 1);
print_r($countdown);Salida:
Array
(
[0] => 5
[1] => 4
[2] => 3
[3] => 2
[4] => 1
)Usar un paso flotante
El paso puede ser un flotante, lo que te permite construir secuencias fraccionarias — útil para controles deslizantes, ejes de gráficas o valores muestreados:
<?php
$fractions = range(0, 1, 0.25);
print_r($fractions);Salida:
Array
(
[0] => 0
[1] => 0.25
[2] => 0.5
[3] => 0.75
[4] => 1
)Errores comunes
- El rango es inclusivo.
range(1, 3)devuelve[1, 2, 3]. Si esperabas un resultado de longitud$end, te desfasarás por uno. - Mantén el paso positivo. La dirección proviene del orden de
$starty$end. Pasar un paso negativo (por ejemplorange(0, 5, -1)) es un error — versiones antiguas de PHP emitían una advertencia, mientras que PHP 8.3+ lanza unValueError. Un paso de0también es inválido. - El último elemento puede omitirse.
range(0, 10, 3)produce[0, 3, 6, 9]—10no es alcanzable desde0en pasos de3, por lo que la secuencia se detiene en el último valor que cabe. - Los flotantes pueden ser imprecisos. Dado que los números de punto flotante no pueden representar exactamente todos los decimales, un paso como
0.1puede no aterrizar en el valor esperado. Redondea los resultados, o itera sobre enteros y divide después, cuando la exactitud sea importante. - La memoria crece con el tamaño.
range(0, 1000000)construye un array de un millón de elementos en memoria. Si solo necesitas iterar, un bucleforoSplFixedArrayevita la asignación.
Cuándo usar range()
range() brilla siempre que necesites una secuencia lista para usar en lugar de un contenedor vacío:
- Controlar un bucle. Combínalo con
foreachpara iterar sobre un rango fijo:foreach (range(1, 12) as $month) { … }. - Construir listas de opciones — años, días del mes, o letras de
AaZpara un menú desplegable. - Combinarlo con
array_map()para transformar cada valor, por ejemploarray_map(fn($n) => $n * $n, range(1, 5))para cuadrados.
Si en cambio quieres un array con el mismo valor repetido, usa array_fill() en lugar de range(). Para más información sobre arrays en general, consulta la guía de arrays en PHP.
Resumen
range() crea un array indexado desde cero con valores secuenciales entre dos extremos. Funciona con enteros, flotantes y caracteres, cuenta hacia arriba o hacia abajo, y acepta un paso opcional. Recuerda que ambos extremos son inclusivos, el paso es siempre positivo y los rangos grandes asignan memoria real — y se convierte en uno de los one-liners más convenientes de PHP.