初始化数组

数组可以初始化为空:

// 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])

此函数创建一个包含一系列元素的数组。前两个参数是必需的,它们设置(包含)范围的起点和终点。第三个参数是可选的,它定义了所采取步骤的大小。从 04 创建一个 range,其中包含一个 stepsize,由此产生的数组将由以下元素组成:01234。如果步长增加到 2(即 range(0, 4, 2)),那么得到的数组将是:024

$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 可以处理整数,浮点数,布尔值(变为整数)和字符串。但是,由于浮点精度问题,使用浮点数作为参数时应该小心。