初始化陣列

陣列可以初始化為空:

// 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 可以處理整數,浮點數,布林值(變為整數)和字串。但是,由於浮點精度問題,使用浮點數作為引數時應該小心。