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 включается в результат:
Вывод:
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)Использование отрицательных чисел
$start и $end могут быть отрицательными, и последовательность по-прежнему будет шагать на 1:
Вывод:
Array
(
[0] => -5
[1] => -4
[2] => -3
[3] => -2
[4] => -1
[5] => 0
[6] => 1
[7] => 2
[8] => 3
[9] => 4
[10] => 5
)Пропуск значений с шагом
Третий аргумент задаёт шаг. Здесь он равен 2, поэтому генерируются только чётные числа:
Вывод:
Array
(
[0] => 0
[1] => 2
[2] => 4
[3] => 6
[4] => 8
[5] => 10
)Генерация диапазона символов
Если $start и $end — одиночные символы, range() проходит по алфавиту между ними. Это удобно для создания меню A–Z, заголовков столбцов или тестовых данных:
Вывод:
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) { … }. - Построение списков вариантов — годы, дни месяца или буквы
A–Zдля выпадающего списка. - Совместно с
array_map()для преобразования каждого значения, напримерarray_map(fn($n) => $n * $n, range(1, 5))для вычисления квадратов.
Если нужен массив из одинаковых повторяющихся значений, используйте array_fill() вместо range(). Подробнее о массивах в целом см. в руководстве PHP arrays.
Итоги
range() создаёт массив с нулевой индексацией из последовательных значений между двумя конечными точками. Функция работает с целыми числами, числами с плавающей точкой и символами, считает вверх и вниз, принимает необязательный шаг. Помните, что оба конца включаются, шаг всегда положительный, а большие диапазоны требуют реальной памяти — и тогда range() становится одним из самых удобных однострочников в PHP.