range

(PHP 4, PHP 5, PHP 7, PHP 8)

range根据范围创建数组,包含指定的元素

说明

range(string|int|float $start, string|int|float $end, int|float $step = 1): array

建立一个包含指定范围单元的数组。

如果 startend 都是 stringstepint,则生成的数组是字节序列,否则,生成的数组将是数字序列。

如果 start 小于或等于 end,则为递增序列,否则为递减序列。

参数

start

序列的第一个值。

end

序列的最后一个可能值。

step

step 表示在序列之间产生序列时前进的数量。

对于递减序列,step 可能是负数。

如果 step 是没有小数部分的 float,则将解释为 int

返回值

返回 array,由元素组成的序列,其中第一个元素为 start,最后一个元素为 end,序列中每个元素之间的差值为 step

返回的数组的最后一个元素是 end 或序列中的前一个元素,具体取决于 step

如果 startend 都是 string,并且 stepint,则生成的数组将是字节序列,通常是拉丁 ASCII 字符。

如果 startendstepfloat,则生成的数组将是 float 序列。

否则,生成的数组将是 int 序列。

错误/异常

  • 如果 step0,则抛出 ValueError
  • 如果 startendstep 不是 is_finite(),则抛出 ValueError
  • 如果 step 是负数,但生成的范围是递增的(例如 $start <= $end),则抛出 ValueError
  • 如果 startend 是空字符串 '',则发出 E_WARNING 并将空字符串解释为 0
  • 如果 startend 不是一个数字字符串,并且多于一个字节,将发出 E_WARNING
  • 如果 startend 是字符串,并且由于另一个边界值是数字而默默转换为 int,将发出 E_WARNING
  • 如果 stepfloat,并且 startend 不是数字字符串,将发出 E_WARNING

更新日志

版本 说明
8.3.0 如果 startend 都是字符串,然后 range() 现在将始终生成字节 array。之前如果其中一个边界值是数字字符串,然后另外一个边界值也会默默转换为 int
8.3.0 如果 startend 是字符串,并且由于另一个边界值是数字而默默转换为 int,现在将发出 E_WARNING
8.3.0 如果 startend 是多于一个字节的非数字字符串,现在将发出 E_WARNING
8.3.0 如果 startend 是空字符串,现在将发出 E_WARNING
8.3.0 如果 step 是不带小数部分的 float,将解释为 int
8.3.0 如果 step 是负数,当生成的范围是递增时,现在将抛出 ValueError
8.3.0 如果 step 不是有限数值(finite),现在将抛出 ValueError
8.3.0 如果 startendarrayobjectresource,现在将会抛出 TypeError。之前会默默地转换为 int

示例

示例 #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

参见