W3docs

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): array

Donde:

  • $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 es 1. Debe ser un número positivo — range() determina la dirección a partir de $start y $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 (0 al 5), 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:

php— editable, runs on the server

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:

php— editable, runs on the server

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:

php— editable, runs on the server

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:

php— editable, runs on the server

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 $start y $end. Pasar un paso negativo (por ejemplo range(0, 5, -1)) es un error — versiones antiguas de PHP emitían una advertencia, mientras que PHP 8.3+ lanza un ValueError. Un paso de 0 también es inválido.
  • El último elemento puede omitirse. range(0, 10, 3) produce [0, 3, 6, 9]10 no es alcanzable desde 0 en pasos de 3, 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.1 puede 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 bucle for o SplFixedArray evita 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 foreach para iterar sobre un rango fijo: foreach (range(1, 12) as $month) { … }.
  • Construir listas de opciones — años, días del mes, o letras de A a Z para un menú desplegable.
  • Combinarlo con array_map() para transformar cada valor, por ejemplo array_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.

Práctica

Práctica
¿Qué hace la función range() en PHP?
¿Qué hace la función range() en PHP?
Was this page helpful?