22、PHP 原生魅力 - 数组 - 生成数组
生成并填充一个新数组
要生成一个具有值序列的数组,可以使用 range()
函数。
如,要创建一个包含值从 1 到 5 的数组,可以使用 range()
函数,第一个参数表示较低的值,第二个参数表示较高的值。
<?php
$arr = range(1, 5);
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
要创建一个类似的具有降序值的数组,可以将较高的值设置为第一个参数。如果第一个参数大于第二个参数, range()
函数实现会自动检测到降序方法。
<?php
$arr = range(5, 1);
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => 5
[1] => 4
[2] => 3
[3] => 2
[4] => 1
)
如果使用 ASCII 字符而不是整数,将会创建一个具有字符序列的数组。
<?php
$arr = range('a', 'e');
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
也可以按降序创建字符数组。
<?php
$arr = range('e', 'a');
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => e
[1] => d
[2] => c
[3] => b
[4] => a
)
如果打算创建一个包含 'A'..'Z' 和 'a'..'z' 的数组,不能直接使用 range('A', 'Z')
。这是因为字符范围的 range()
函数是基于 ASCII 表的。在 ASCII 表的中间,大写和小写字母之间还有其他字符,比如 [ \ ] ^ _ 等。
作为替代,你可以分别为大写字母和小写字母使用 range() 函数,然后将这两个序列合并起来:
<?php
$arr = array_merge(range('A','Z'), range('a','z'));
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => A
...
[51] => z
)
还可以生成浮点数数组
<?php
$arr = range(1.1, 5.1);
print_r($arr);
输出如下
$ php 22-range.php
Array
(
[0] => 1.1
[1] => 2.1
[2] => 3.1
[3] => 4.1
[4] => 5.1
)
Step
第三个参数(可选,默认值为 1)确定每个元素的增量。例如,如果想生成 1 到 10 范围内的奇数:
<?php
$arr = range(1, 10, 2);
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
[4] => 9
)
步长参数可以为负。在这种情况下,将创建一个降序序列
<?php
$arr = range(10, 1, -2);
print_r($arr);
输出如下:
$ php 22-range.php
Array
(
[0] => 10
[1] => 8
[2] => 6
[3] => 4
[4] => 2
)
如果使用负步长值,并且第一个参数小于第二个参数,则会引发 ValueError 异常
<?php
$arr = range(1, 10, -2);
print_r($arr);
运行如下:
$ php 22-range.php
PHP Fatal error: Uncaught ValueError: range(): Argument #3 ($step) must be greater than 0 for increasing ranges in
请登录后再评论