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) поведение с плавающей точкой и строками могло отличаться.
Расширенные примеры
<?
$years = array_combine(range(date('Y'), 2000), range(date('Y'), 2000));
print_r($years);
?>Array
(
[2024] => 2024
[2023] => 2023
...
[2000] => 2000
)<?
// Внимание: из за неточностей float возможны неожиданные результаты
$seq = range(0, 1, 0.3);
print_r($seq);
?>Array
(
[0] => 0
[1] => 0.3
[2] => 0.6
[3] => 0.9
)<?
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
<?
$squares = array_map(fn($n) => $n ** 2, range(1, 5));
print_r($squares);
?>Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)<?
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
)Аналоги функции в других языках
Функция range() возвращает объект-диапазон, а не список (в Python 3). Для получения списка используется list(range(start, stop, step)). Конечное значение не включается в результат.
print(list(range(1, 6)))[1, 2, 3, 4, 5]
Стандартной функции нет. Часто создают массив через Array.from() или оператор расширения.
console.log([...Array(5).keys()]); // [0,1,2,3,4][0, 1, 2, 3, 4]
Для генерации последовательностей чисел используют рекурсивные 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