Range: примеры (PHP)

Генерация последовательностей функцией range в языке PHP
Раздел: Работа с массивами
range(mixed $start, mixed $end, int|float $step = 1): array

Функция range в PHP

Функция range() создает массив, содержащий диапазон элементов. Обычно она применяется для генерации последовательностей чисел или букв. Это удобно при инициализации массивов для циклов, заполнения значений или тестирования.

Аргументы функции

Функция принимает три аргумента:

  • start (смешанный): Первое значение последовательности.
  • end (смешанный): Конечное значение последовательности.
  • step (число): Шаг приращения. Если не указан, по умолчанию равен 1 (или -1 для убывающей последовательности). Значение должно быть положительным.

Аргументы могут быть целыми числами или одиночными символами (строками длиной в один символ).

Примеры использования range

Стандартные числовые диапазоны

Создание простого числового массива.

<?
print_r(range(1, 5));
?>
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Диапазон с указанием шага
<?
print_r(range(0, 10, 2));
?>
Array
(
    [0] => 0
    [1] => 2
    [2] => 4
    [3] => 6
    [4] => 8
    [5] => 10
)
Убывающая последовательность
<?
print_r(range(5, 1));
?>
Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)
Диапазон букв
<?
print_r(range('a', 'e'));
?>
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Похожие функции в PHP

  • array_fill(start_index, num, value): Создает массив, заполненный одинаковыми значениями. Используется, когда нужен массив с повторяющимся элементом, а не последовательностью.
  • Циклы for/foreach: Для генерации сложных последовательностей, где логику шага или условия нельзя выразить простым арифметическим приращением.
  • Генераторы (yield): Для создания больших последовательностей без выделения памяти под весь массив. Функция range всегда возвращает массив.

Функцию range предпочтительнее применять для простой и быстрой генерации линейных последовательностей чисел или букв.

Типичные ошибки

Отрицательный шаг для возрастающего диапазона

Если start меньше end, но указан отрицательный step, функция вернет пустой массив.

<?
print_r(range(1, 5, -1));
?>
Array
(
)
Слишком большой диапазон

Попытка создать очень большой массив может исчерпать доступную память.

<?
// range(1, 100000000); // Может вызвать фатальную ошибку памяти.
?>
Использование строк длиннее одного символа

Для строк берётся только первый символ.

<?
print_r(range('aa', 'cc'));
?>
Array
(
    [0] => a
    [1] => b
    [2] => c
)

Изменения в новых версиях PHP

  • В PHP 8.0 функция range() теперь выбрасывает исключение ValueError, если параметр step является числом с плавающей точкой, равным 0.0. Ранее возвращался пустой массив.
  • В более ранних версиях (PHP 5) поведение с плавающей точкой и строками могло отличаться.

Расширенные примеры

Создание ассоциативного массива для выпадающего списка
Пример php
<?
$years = array_combine(range(date('Y'), 2000), range(date('Y'), 2000));
print_r($years);
?>
Array
(
    [2024] => 2024
    [2023] => 2023
    ...
    [2000] => 2000
)
Генерация последовательности с плавающим шагом
Пример php
<?
// Внимание: из за неточностей float возможны неожиданные результаты
$seq = range(0, 1, 0.3);
print_r($seq);
?>
Array
(
    [0] => 0
    [1] => 0.3
    [2] => 0.6
    [3] => 0.9
)
Имитация цикла for для символов
Пример php
<?
foreach (range('Z', 'A') as $letter) {
    echo $letter . ' ';
}
?>
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Использование в комбинации с array_map
Пример php
<?
$squares = array_map(fn($n) => $n ** 2, range(1, 5));
print_r($squares);
?>
Array
(
    [0] => 1
    [1] => 4
    [2] => 9
    [3] => 16
    [4] => 25
)
Создание диапазона в обратном алфавитном порядке с шагом 2
Пример php
<?
print_r(range('z', 'a', 2));
?>
Array
(
    [0] => z
    [1] => x
    [2] => v
    [3] => t
    [4] => r
    [5] => p
    [6] => n
    [7] => l
    [8] => j
    [9] => h
    [10] => f
    [11] => d
    [12] => b
)

Аналоги функции в других языках

Python

Функция range() возвращает объект-диапазон, а не список (в Python 3). Для получения списка используется list(range(start, stop, step)). Конечное значение не включается в результат.

print(list(range(1, 6)))
[1, 2, 3, 4, 5]
JavaScript

Стандартной функции нет. Часто создают массив через Array.from() или оператор расширения.

console.log([...Array(5).keys()]); // [0,1,2,3,4]
[0, 1, 2, 3, 4]
MySQL

Для генерации последовательностей чисел используют рекурсивные CTE или таблицы-серии.

WITH RECURSIVE seq AS (
    SELECT 1 AS n
    UNION ALL
    SELECT n + 1 FROM seq WHERE n < 5
)
SELECT * FROM seq;
1
2
3
4
5

PHP range function comments

En
Range Create an array containing a range of elements