W3docs

range()

range() — встроенная функция PHP для создания массива с последовательностью элементов от начального до конечного значения.

Введение

range() — встроенная функция PHP, которая создаёт массив с последовательностью элементов от начального до конечного значения. Вместо того чтобы писать цикл для поочерёдного добавления чисел или букв в массив, вы указываете границы (и при необходимости шаг), а PHP заполняет всё остальное.

На этой странице рассматриваются синтаксис, все виды диапазонов (возрастающий, убывающий, целые числа, числа с плавающей точкой и символы), типичные ловушки и практические сценарии использования range().

Синтаксис

range(string|int|float $start, string|int|float $end, int|float $step = 1): array

Где:

  • $start: первое значение последовательности.
  • $end: последнее значение последовательности.
  • $step: необязательный параметр. Величина шага между значениями. По умолчанию равен 1. Должен быть положительным числом — направление определяется из $start и $end, а не из знака шага.

Два важных момента, которые стоит запомнить сразу:

  • Оба конца включаются. range(0, 5) возвращает шесть элементов (от 0 до 5), а не пять.
  • Результат — всегда новый массив с нулевой индексацией — ключи 0, 1, 2, … независимо от значений внутри.

Примеры

Генерация чисел от 0 до 5

Простейший вызов принимает начало и конец. Обратите внимание, что 5 включается в результат:

php— editable, runs on the server

Вывод:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 5
)

Использование отрицательных чисел

$start и $end могут быть отрицательными, и последовательность по-прежнему будет шагать на 1:

php— editable, runs on the server

Вывод:

Array
(
    [0] => -5
    [1] => -4
    [2] => -3
    [3] => -2
    [4] => -1
    [5] => 0
    [6] => 1
    [7] => 2
    [8] => 3
    [9] => 4
    [10] => 5
)

Пропуск значений с шагом

Третий аргумент задаёт шаг. Здесь он равен 2, поэтому генерируются только чётные числа:

php— editable, runs on the server

Вывод:

Array
(
    [0] => 0
    [1] => 2
    [2] => 4
    [3] => 6
    [4] => 8
    [5] => 10
)

Генерация диапазона символов

Если $start и $end — одиночные символы, range() проходит по алфавиту между ними. Это удобно для создания меню A–Z, заголовков столбцов или тестовых данных:

php— editable, runs on the server

Вывод:

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
)

Обратный отсчёт с убывающим диапазоном

Если $start больше $end, range() автоматически считает в обратном порядке. Передавать отрицательный шаг не нужно — шаг остаётся положительным:

<?php

$countdown = range(5, 1);
print_r($countdown);

Вывод:

Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)

Шаг с плавающей точкой

Шаг может быть числом с плавающей точкой, что позволяет строить дробные последовательности — полезно для слайдеров, осей графиков или дискретных значений:

<?php

$fractions = range(0, 1, 0.25);
print_r($fractions);

Вывод:

Array
(
    [0] => 0
    [1] => 0.25
    [2] => 0.5
    [3] => 0.75
    [4] => 1
)

Типичные ловушки

  • Диапазон является включительным. range(1, 3) даёт [1, 2, 3]. Если вы ожидали массив длиной $end, произойдёт ошибка на единицу.
  • Шаг должен быть положительным. Направление определяется порядком $start и $end. Передача отрицательного шага (например, range(0, 5, -1)) является ошибкой — в старых версиях PHP выводилось предупреждение, а PHP 8.3+ выбрасывает ValueError. Шаг 0 также недопустим.
  • Последний элемент может быть пропущен. range(0, 10, 3) даёт [0, 3, 6, 9]10 не достижимо из 0 с шагом 3, поэтому последовательность останавливается на последнем подходящем значении.
  • Числа с плавающей точкой могут быть неточными. Поскольку числа с плавающей точкой не могут точно представить каждое десятичное число, шаг 0.1 может не попасть в ожидаемое значение. Округляйте результаты или шагайте по целым числам с последующим делением, когда важна точность.
  • Память растёт вместе с размером. range(0, 1000000) создаёт массив из миллиона элементов в памяти. Если нужно лишь перебрать значения, цикл for или SplFixedArray избегает этого расхода.

Когда использовать range()

range() незаменима, когда нужна готовая последовательность, а не пустой контейнер:

  • Управление циклом. Используйте вместе с foreach для перебора фиксированного диапазона: foreach (range(1, 12) as $month) { … }.
  • Построение списков вариантов — годы, дни месяца или буквы AZ для выпадающего списка.
  • Совместно с array_map() для преобразования каждого значения, например array_map(fn($n) => $n * $n, range(1, 5)) для вычисления квадратов.

Если нужен массив из одинаковых повторяющихся значений, используйте array_fill() вместо range(). Подробнее о массивах в целом см. в руководстве PHP arrays.

Итоги

range() создаёт массив с нулевой индексацией из последовательных значений между двумя конечными точками. Функция работает с целыми числами, числами с плавающей точкой и символами, считает вверх и вниз, принимает необязательный шаг. Помните, что оба конца включаются, шаг всегда положительный, а большие диапазоны требуют реальной памяти — и тогда range() становится одним из самых удобных однострочников в PHP.

Практика

Практика
Что делает функция range() в PHP?
Что делает функция range() в PHP?
Was this page helpful?