To create a range array like
Array
(
[11] => 1
[12] => 2
[13] => 3
[14] => 4
)
combine two range arrays using array_combine:
array_combine(range(11,14),range(1,4))(PHP 4, PHP 5, PHP 7, PHP 8)
range — ある範囲の要素を含む配列を作成する
ある範囲の要素を含む配列を作成します。
start と end
が両方文字列で、かつ step が整数の場合、
生成される配列はバイト列のシーケンスになります。
そうでない場合、生成される配列は数値のシーケンスになります。
start が end
よりも小さい場合、シーケンスは増加します。
そうでない場合、シーケンスは減少します。
startシーケンスの最初の値。
endシーケンスの最後としてあり得る値。
step
step は、生成されるシーケンスの個別の値が
どれくらい離れているかを指定します。
シーケンスが減少する場合、step
は負の値を指定しても構いません。
step が 端数のない float
の場合、整数として解釈されます。
要素のシーケンスを配列として返します。
最初の要素は start になり、
end になるまで続きます。
シーケンスのそれぞれの値は、step だけ離れています。
返される配列の最後の要素は、
end または シーケンスの直前の要素になります。
どちらになるかは、step の値によります。
start と end
が両方文字列で、かつ step が整数の場合、
生成される配列は、バイト列のシーケンスになります。
一般的にはラテン文字の ASCII 文字からなるシーケンスです。
start, end, step のうち少なくともひとつが float の場合、
生成される配列は float のシーケンスになります。
その他の場合、生成される配列は整数のシーケンスになります。
step が 0 の場合、ValueError がスローされます。
start, end, step が有限の値(is_finite()) でない場合、
ValueError がスローされます。
step が負の値なのに、生成される範囲が増えている(つまり、 $start <= $end) 場合、
ValueError がスローされます。
start または end が空文字列 '' の場合、E_WARNING が発生し、空文字列は 0 として解釈されます。
start または end が
数値形式の文字列
でない、長さが1バイトより大きい値の場合、E_WARNING が発生します。
start または end が
暗黙のうちに整数にキャストされた文字列の場合、
E_WARNING が発生します。なぜなら、他の境界の入力値は数値だからです。
step が float の場合、
かつ start と end が
数値形式の文字列
でない場合、E_WARNING が発生します。
| バージョン | 説明 |
|---|---|
| 8.3.0 |
start と end
が両方文字列の場合、range() は常にバイト列を要素とした配列を生成するようになりました。
これより前のバージョンでは、境界の値のうちのひとつが数値形式の文字列の場合に、もう一方の境界の値を整数にキャストしていました。
|
| 8.3.0 |
start または end が
暗黙のうちに整数にキャストされた文字列の場合、
E_WARNING が発生するようになりました。
なぜなら、他の境界の入力値が数値だからです。
|
| 8.3.0 |
start または end
が数値形式の文字列でなく、かつ長さが1バイトより大きい値の場合、
E_WARNING が発生するようになりました。
|
| 8.3.0 |
start または end が空文字列の場合、E_WARNING が発生するようになりました。
|
| 8.3.0 |
step が 端数のない float
の場合、整数として解釈されるようになりました。
|
| 8.3.0 |
step が負の値なのに、生成される範囲が増えている場合、
ValueError がスローされるようになりました。
|
| 8.3.0 |
step が有限の値でない場合、
ValueError がスローされるようになりました。
|
| 8.3.0 |
start または end
が配列、object、resource の場合、
TypeError がスローされるようになりました。
これより前のバージョンでは、これらの値は暗黙のうちに整数にキャストされていました。
|
例1 range() の例
<?php
echo implode(', ', range(0, 12)), PHP_EOL;
echo implode(', ', range(0, 100, 10)), PHP_EOL;
echo implode(', ', range('a', 'i')), PHP_EOL;
echo implode(', ', range('c', 'a')), PHP_EOL;
echo implode(', ', range('A', 'z')), PHP_EOL;
?>上の例の出力は以下となります。
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 a, b, c, d, e, f, g, h, i c, b, a A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
To create a range array like
Array
(
[11] => 1
[12] => 2
[13] => 3
[14] => 4
)
combine two range arrays using array_combine:
array_combine(range(11,14),range(1,4))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.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.
But.
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.
Compare:
<?php
echo implode("",range(9,"Q"));
// prints 9876543210
echo implode("",range