初始化数组
数组可以初始化为空:
// An empty array
$foo = array();
// Shorthand notation available since PHP 5.4
$foo = [];
可以使用以下值初始化数组并预设数组:
// Creates a simple array with three strings
$fruit = array('apples', 'pears', 'oranges');
// Shorthand notation available since PHP 5.4
$fruit = ['apples', 'pears', 'oranges'];
也可以使用自定义索引 (也称为关联数组) 初始化数组 :
// A simple associative array
$fruit = array(
'first' => 'apples',
'second' => 'pears',
'third' => 'oranges'
);
// Key and value can also be set as follows
$fruit['first'] = 'apples';
// Shorthand notation available since PHP 5.4
$fruit = [
'first' => 'apples',
'second' => 'pears',
'third' => 'oranges'
];
如果以前没有使用过该变量,PHP 会自动创建它。虽然方便,但这可能会使代码更难以阅读:
$foo[] = 1; // Array( [0] => 1 )
$bar[][] = 2; // Array( [0] => Array( [0] => 2 ) )
索引通常会在你离开的地方继续。PHP 将尝试使用数字字符串作为整数:
$foo = [2 => 'apple', 'melon']; // Array( [2] => apple, [3] => melon )
$foo = ['2' => 'apple', 'melon']; // same as above
$foo = [2 => 'apple', 'this is index 3 temporarily', '3' => 'melon']; // same as above! The last entry will overwrite the second!
要初始化具有固定大小的数组,你可以使用 SplFixedArray
:
$array = new SplFixedArray(3);
$array[0] = 1;
$array[1] = 2;
$array[2] = 3;
$array[3] = 4; // RuntimeException
// Increase the size of the array to 10
$array->setSize(10);
注意:使用 SplFixedArray
创建的数组对于大型数据集的内存占用减少,但键必须是整数。
要初始化具有动态大小但使用 n
非空元素(例如占位符)的数组,你可以使用如下循环:
$myArray = array();
$sizeOfMyArray = 5;
$fill = 'placeholder';
for ($i = 0; $i < $sizeOfMyArray; $i++) {
$myArray[] = $fill;
}
// print_r($myArray); results in the following:
// Array ( [0] => placeholder [1] => placeholder [2] => placeholder [3] => placeholder [4] => placeholder )
如果所有占位符都相同,那么你也可以使用 array_fill()
函数创建它 :
array array_fill(int $ start_index,int $ num,mixed $ value)
这将创建并返回一个数组,其中包含 num
条目 value
,键位于 start_index
。
注意:如果 start_index
为负数,它将以负指数开始,并从 0 开始继续以下元素。
$a = array_fill(5, 6, 'banana'); // Array ( [5] => banana, [6] => banana, ..., [10] => banana)
$b = array_fill(-2, 4, 'pear'); // Array ( [-2] => pear, [0] => pear, ..., [2] => pear)
结论:使用 array_fill()
, 你实际上可以做的更有限。循环更灵活,为你提供更广泛的机会。
每当你想要一个填充了一系列数字(例如 1-4)的数组时,你可以将每个元素附加到数组或使用 range()
函数:
数组范围(混合$ start,混合$ end [,数字$ step = 1])
此函数创建一个包含一系列元素的数组。前两个参数是必需的,它们设置(包含)范围的起点和终点。第三个参数是可选的,它定义了所采取步骤的大小。从 0
到 4
创建一个 range
,其中包含一个 stepsize
,由此产生的数组将由以下元素组成:0
,1
,2
,3
和 4
。如果步长增加到 2
(即 range(0, 4, 2)
),那么得到的数组将是:0
,2
和 4
。
$array = [];
$array_with_range = range(1, 4);
for ($i = 1; $i <= 4; $i++) {
$array[] = $i;
}
print_r($array); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
print_r($array_with_range); // Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
range
可以处理整数,浮点数,布尔值(变为整数)和字符串。但是,由于浮点精度问题,使用浮点数作为参数时应该小心。