22、PHP 原生魅力 - 数组 - 生成数组

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 133

时间: 2024-09-08 00:05:55

生成并填充一个新数组

要生成一个具有值序列的数组,可以使用 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
请登录后再评论