Функция range в PHP
Функция range создает массив с диапазоном элементов. К примеру, можно создать массив, заполненный числами от 1 до 100 или буквами от a до z . Диапазон, который сгенерирует функция, задается параметрами: первый параметр откуда генерировать, а второй — докуда.
Третий необязательный параметр функции задает шаг. К примеру, можно сделать ряд 1 , 3 , 5 , 7 , если задать шаг 2 , или ряд 1 , 4 , 7 , 10 если задать шаг 3 .
Синтаксис
Пример
Давайте создадим массив, заполненный числами от 1 до 5 :
Пример
Давайте создадим массив, заполненный числами от 5 до 1 :
Пример
Давайте создадим массив, заполненный числами от 0 до 10 c шагом 2 :
Пример
Давайте создадим массив, заполненный буквами от a до e :
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
- Контекстная реклама
- Поисковое продвижение SEO
- Комплексный маркетинг
- Performance стратегия
- Email маркетинг
- SMM
- Репутация в поиске SERM
- Репутация в интернете ORM
- Создание сайтов на Bitrix
- Создание интернет-магазина на Bitrix
- Инструменты
- Блог
range
Конечное значение, которым заканчивается последовательность.
Если указан параметр step , то он будет использоваться как инкремент (или декремент) между элементами последовательности. Параметр step не должен быть равен 0 и не должен выходить за пределы указанного диапазона. Если step не указан, он принимает значение по умолчанию, равное 1 .
Возвращаемые значения
Возвращает массив элементов от start до end , включительно.
Примеры
Пример #1 Примеры использования range()
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach ( range ( 0 , 12 ) as $number ) echo $number ;
>
?php
// Параметр step
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach ( range ( 0 , 100 , 10 ) as $number ) echo $number ;
>
// Использование последовательности знаков
// array(‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’);
foreach ( range ( ‘a’ , ‘i’ ) as $letter ) echo $letter ;
>
// array(‘c’, ‘b’, ‘a’);
foreach ( range ( ‘c’ , ‘a’ ) as $letter ) echo $letter ;
>
?>
Примечания
Замечание:
Значения для последовательности знаков ограничены длиной в один символ. Если их длина больше одного, то только первый символ используется.
Смотрите также
User Contributed Notes 29 notes
To create a range array like
combine two range arrays using array_combine:
So with the introduction of single-character ranges to the range() function, the internal function tries to be «smart», and (I am inferring from behavior here) apparently checks the type of the incoming values. If one is numeric, including numeric string, then the other is treated as numeric; if it is a non-numeric string, it is treated as zero.
If you pass in a numeric string in such a way that is is forced to be recognized as type string and not type numeric, range() will function quite differently.
echo implode ( «» , range ( 9 , «Q» ));
// prints 9876543210
echo implode ( «» , range ( «9 » , «Q» )); //space after the 9
// prints 9:;?@ABCDEFGHIJKLMNOPQ
echo implode ( «» , range ( «q» , «9 » ));
// prints qponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@ ?> =?>
I wouldn’t call this a bug, because IMO it is even more useful than the stock usage of the function.
The function «range» is very useful to get an array of characters as range(‘C’,’R’) does.
At work, I had to extend the function range($a,$b) to work in this special case: with two uppercase strings $a and $b, it should return all the possible strings between $a and $b.
This could be used for example to get the excel column indexes.
e.g. array( ‘A’ , ‘B’ , ‘C’ . ‘Z’ , ‘AA’ , ‘AB’ , ‘AC’ , ‘AD’ ) ?>
So I wrote the function getrange($min,$max) that exactly does this.
function getcolumnrange ( $min , $max ) $pointer = strtoupper ( $min );
$output =array();
while( positionalcomparison ( $pointer , strtoupper ( $max )) <= 0 )array_push ( $output , $pointer );
$pointer ++;
>
return $output ;
>
function positionalcomparison ( $a , $b ) $a1 = stringtointvalue ( $a ); $b1 = stringtointvalue ( $b );
if( $a1 > $b1 )return 1 ;
else if( $a1 < $b1 )return - 1 ;
else return 0 ;
>
/*
* e.g. A=1 — B=2 — Z=26 — AA=27 — CZ=104 — DA=105 — ZZ=702 — AAA=703
*/
function stringtointvalue ( $str ) $amount = 0 ;
$strarra = array_reverse ( str_split ( $str ));
for( $i = 0 ; $i < strlen ( $str ); $i ++)$amount +=( ord ( $strarra [ $i ])- 64 )* pow ( 26 , $i );
>
return $amount ;
>
?>
The function will generate an array of integers even if your numerical parameters are enclosed in quotes.
var_dump ( range ( ‘1’ , ‘2’ ) ); // outputs array(2) < [0]=>int(1) [1]=> int(2) >
?>
An easy way to get an array of strings is to map strval() to the range:
var_dump ( array_map ( ‘strval’ , range ( ‘1’ , ‘2’ )) ); // outputs array(2) < [0]=>string(1) «1» [1]=> string(1) «2» >
?>
You might expect range($n, $n-1) to be an empty array (as in e.g. Python) but actually PHP will assume a step of -1 if start is larger than end.
function natural_prime_numbers (array $range , bool $print_info = false ) : array $start_time = time ();
$primes_numbers = array();
$print = » ;
$count_range = count ( $range );
foreach( $range as $number ) $values_division_number = array();
if( $number === 0 || $number === 1 || ! is_int ( $number )) < // eliminate 0, 1 and other no integer
continue;
>
if( $number != 2 && $number % 2 === 0 ) < // eliminate 2 and pairs numbers
continue;
>
for( $i = 1 ; $i <= $number ; $i ++)$resultado_divisao = $number / $i ;
$values_division_number [ $i ] = $resultado_divisao ;
?php>
if( $count_range $print .= PHP_EOL ;
$info = ‘The number ‘ . $number . ‘ divided by the number ‘ . $i . ‘ is equal to: ‘ .( $number / $i );
$print .= $info ;
if( $i === $number ) $print .= PHP_EOL ;
>
>
$values_division_number = array_values ( $values_division_number ); // reindex array
// here we want only array with 2 indexes with the values 1 and own number (rule to a natural prime number)
if( count ( $values_division_number ) === 2 && $values_division_number [ 0 ] === $number && $values_division_number [ 1 ] === 1 ) $primes_numbers [ $number ] = $number ;
>
>
>
return array(
‘length_prime_numbers’ => count ( $primes_numbers ),
‘prime_numbers’ => array_values ( $primes_numbers ),
‘print’ => $print ,
‘total_time_processing’ => ( time () — $start_time ). ‘ seconds.’ ,
);
>
var_dump ( natural_prime_numbers ( range ( 0 , 11 ))); // here the range() function 😉
// Result:
// array (size=3)
// ‘length_prime_numbers’ => int 5
// ‘prime_numbers’ =>
// array (size=5)
// 0 => int 2
// 1 => int 3
// 2 => int 5
// 3 => int 7
// 4 => int 11
// ‘print’ => string ‘
// O número 2 dividido pelo número 1 é igual a: 2
// O número 2 dividido pelo número 2 é igual a: 1
// O número 3 dividido pelo número 1 é igual a: 3
// O número 3 dividido pelo número 2 é igual a: 1.5
// O número 3 dividido pelo número 3 é igual a: 1
// O número 5 dividido pelo número 1 é igual a: 5
// O número 5 dividido pelo número 2 é igual a: 2.5
// O número 5 dividido pelo número 3 é igual a: 1.6666666666667
// O número 5 dividido pelo número 4 é igual a: 1.25
// O número 5 dividido pelo ‘.
// **************************** //
//
// * Remember that the function is recursive, that is: a range of 5000 takes more than 1 minute on a processor Intel® Core™ i5-8250U (3.40 GHz).
//
// **************************** //
?>
range
range() возвращает массив элементов с low по high, включительно. Если low > high, последовательность будет убывающей.
New parameter: Дополнительный параметр step был добавлен в PHP 5.0.0.
Если указан параметр step, он будет использоваться как инкремент между элементами последовательности. step должен быть положительным числом. Если step не указан, он принимает значение по умолчанию 1.
Пример 1. Примеры использования php функции range()
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) foreach (range(0, 12) as $number) < echo $number; >// Параметр step был добавлен в 5.0.0 // array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) foreach (range(0, 100, 10) as $number) < echo $number; >// Использование последовательности знаков было добавлено в версии 4.1.0 // array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'); foreach (range('a', 'i') as $letter) < echo $letter; >// array('c', 'b', 'a'); foreach (range('c', 'a') as $letter)
Замечание: До появления PHP 4.1.0, range() создавала только массивы, содержащие диапазон чисел в порядке возрастания. Поддержка последовательностей знаков и создания диапазона в порядке убывания была добавлена в версии 4.1.0. Диапазон знаков можно задать только при помощи строки из одного знака. Если длина такой строки будет более одного знака, будет использован первый знак.
В PHP версий с 4.1.0 по 4.3.2, range() рассматривал числовые строки именно как строки, а не числа. Вместо них использовалась последовательность знаков. Например, «4242» трактовалось «4».
php. Создание массива, заполненного целыми числами
Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Представим, что вам понадобилось создать массив из чисел в каком то диапазоне значений.
Допустим массив должен содержать числа от 1 до 64. Или значений в массиве должны быть кратны 2 и массив должен быть заполнен цифрами от 2 до 64. Наверное первое, что приходит на ум, это заполнить массив с помощью какого то цикла. В статье будет описан более простой и быстрый способ.
Для создание массива, заполненного значениями от 1 до 64, достаточно воспользоваться функцией range:
print_r('Заполнение массива от 1 до 64
'); print_r($values);
Заполнение массива значениями от 1 до 64 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 11 [11] => 12 [12] => 13 [13] => 14 [14] => 15 [15] => 16 [16] => 17 [17] => 18 [18] => 19 [19] => 20 [20] => 21 [21] => 22 [22] => 23 [23] => 24 [24] => 25 [25] => 26 [26] => 27 [27] => 28 [28] => 29 [29] => 30 [30] => 31 [31] => 32 [32] => 33 [33] => 34 [34] => 35 [35] => 36 [36] => 37 [37] => 38 [38] => 39 [39] => 40 [40] => 41 [41] => 42 [42] => 43 [43] => 44 [44] => 45 [45] => 46 [46] => 47 [47] => 48 [48] => 49 [49] => 50 [50] => 51 [51] => 52 [52] => 53 [53] => 54 [54] => 55 [55] => 56 [56] => 57 [57] => 58 [58] => 59 [59] => 60 [60] => 61 [61] => 62 [62] => 63 [63] => 64 )
Если вам необходимо получить массив значений, кратный единице (1, 3, 5, 7 и тд), то вам необходимо в третьем параметре указать шаг приращения равный 2:
print_r('Кратно единице
'); print_r($oneValues);
Кратно единице Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 [10] => 21 [11] => 23 [12] => 25 [13] => 27 [14] => 29 [15] => 31 [16] => 33 [17] => 35 [18] => 37 [19] => 39 [20] => 41 [21] => 43 [22] => 45 [23] => 47 [24] => 49 [25] => 51 [26] => 53 [27] => 55 [28] => 57 [29] => 59 [30] => 61 [31] => 63 )
Если вам необходимо получить массив значений, кратный двум (2, 4, 6, 8 и тд), то вам необходимо в первом параметре указать, что вы заполняете массив начиная с цифры 2 и в третьем параметре указать шаг приращения равный 2:
print_r('Кратно двум:
'); print_r($twoValues);
Кратно двум: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 [5] => 12 [6] => 14 [7] => 16 [8] => 18 [9] => 20 [10] => 22 [11] => 24 [12] => 26 [13] => 28 [14] => 30 [15] => 32 [16] => 34 [17] => 36 [18] => 38 [19] => 40 [20] => 42 [21] => 44 [22] => 46 [23] => 48 [24] => 50 [25] => 52 [26] => 54 [27] => 56 [28] => 58 [29] => 60 [30] => 62 [31] => 64 )
'); print_r('Заполнение массива значениями от 1 до 64
'); print_r($values); print_r('Кратно единице
'); print_r($oneValues); print_r('Кратно двум:
'); print_r($twoValues);