# Array 數組
## 數組函數列表及說明
http://www.w3school.com.cn/php/php_ref_array.asp
## 官方的描述
>PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。此類型在很多方面做了優化,因此可以把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。由于數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。
## 數組的介紹
* 數組分為 **索引數組** 和 **關聯數組**(也叫鍵值對數組)。
* 數組通常由任意數量的 **鍵(key)** 和 **值(value)** 組成。
* 以純數字作為鍵的數組,我們叫索引數組,此外的數組都可以叫關聯數組。
* 鍵值之間使用 `=>`(大于等于符號)隔開。
* 每一對鍵值之間用`,`(逗號)隔開,最后一個子元素之后的逗號可以省略,但關聯數組最后的逗號建議保留。
* 定義數組時鍵(key)可以不用輸入,也可以只給其中部分值設置鍵,系統自動給沒有鍵的值加上以從零開始的數字鍵。
* 數組的鍵建議使用`integer`或`string`類型,值可以是任意類型。
* 數組可以同時含有`integer`和`string`類型的鍵,因為PHP實際上并不區分索引數組和關聯數組。
* 在對數組進行賦值的時候,如果不指定鍵,則取當前數組中最大數字索引加一作為鍵,哪怕數組中當前都是以`string`類型作為鍵的關聯數組。
* 如果一個函數返回的是一個數組,那么在調用函數時可以直接在函數后面加上中括號和索引號來獲取返回的值,例如`getName()[1]`。
* 取值時,如果提供的鍵并未定義,那么返回的結果是`null`。
* 以字符串作為鍵,在定義或取值的時候,需要給字符串加上引號作為索引,例如`$array["key"]`,如果不加,就會報錯,但是程序其實是可以運行的,例如`$array[key]`,這時系統會以為`key`是常量,然后去找,結果沒有這個常量,系統就主動給key加上了雙引號。
* 數組的鍵可以是一個函數,例如`$array[getKey()]`,如果該函數并沒有返回值,那么此時的鍵將會是空。
## 鍵的強制轉換
> 使用下列方式中的類型數據作為數組的鍵將會被系統強制進行類型轉換
* 合法的整數型字符串會被強制轉換成整形,例如`"8"`實際上會被當做`8`,但"08"則不會。
* 浮點數也會被轉換成整數型,其小數部分會被省去,例如`2.6`實際上會被當做`2`。
* 布爾值會被轉換成整數型,`true`為`1`,`false`為`0`。
* null會被轉成空字符串。
* 數組和對象不能用作key,否則會無效且有警告。
* 數組key的強制轉換例子
~~~
<?php
// 定義數組
$array = [
8 => "a",
"3" => "b",
13.6 => "c",
true=> "d"
];
// 打印數組的結構
print_r($array);
// 此時在瀏覽器里可以看到數組內容為
// Array ( [8] => a [3] => b [13] => c [1] => d )
?>
~~~
## 數組的強制轉換
* 大多數常見類型(除了object之外),如果將其轉換為數組,例如`(array) $var`得到的結果將是只有一個元素且索引為0的數組,實際上如同于`array($var)`。
* 將object對象轉換為array時,系統會以object對象的屬性變量名作為鍵,屬性的內容作為值,其中私有屬性前面會加上類名作為前綴,保護屬性前面會加上`*`作為前綴,而這些前綴前后各有一個`null`字符,有點麻煩,所以不建議這么轉換。
## 數組的簡單應用
* 數組的定義
~~~
<?php
// 通過array()函數定義
$array = array(1, 3.5, true, "four");
// 通過[]定義(需要PHP5.4或以上)
$array = array[1, 3.5, true, "four"];
// 定義空數組
$array = [];
// 未賦值變量定義數組
$array_one[] = "xixi";
// 未賦值變量定義數組2
$array_two[2] = "haha";
?>
~~~
* 數組的賦值
~~~
<?php
// 定義一個數組
$array = [
"a" => 2016,
"b" => "04",
"c" => "18",
];
// 添加一個值
$array[] = "xixi";
// 再添加一個值
$array[2] = "haha";
// 修改一個值
$array[2] = "haha";
?>
~~~
* 數組的獲取和刪除
~~~
<?php
// 定義一個數組
$array = [
"a" => 2016,
"b" => "04",
"c" => "18",
"d" => [
"h" => 10,
"i" => 35,
"s" => 20,
],
];
// 獲取一個值
echo $array["a"];
// 再獲取一個值
echo $array["d"]["h"];
// 刪除一個值
unset($array["d"]["s"]);
// 再刪除一個值
unset($array["d"]);
?>
~~~