## 數組(array)
PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。
此類型在很多方面做了優化,因此可以把它當成真正的數組,或列表(向量),散列表(是映射的一種實現),字典,集合,棧,隊列以及更多可能性。
由于數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。
### 數組的定義
可以用 array() 或 [] 語言結構來新建一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對。
鍵(key)可是是一個整數 integer 或字符串 string
值(value)可以是任意類型的值
一個簡單數組
```
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自 PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
];
var_dump($array);
array(2) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
}
?>
```
類型強制與覆蓋示例
```
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
array(1) {
[1]=>
string(1) "d"
}
?>
```
混合 integer 和 string 鍵名
```
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
100 => -100,
-100 => 100,
);
var_dump($array);
array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}
?>
```
沒有鍵名的索引數組
```
<?php
$array = array("foo", "bar");
var_dump($array);
array(2) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
}
?>
```
僅對部分單元指定鍵名
```
<?php
$array = array(
"foo",
"bar",
6 => "hello",
"world",
);
var_dump($array);
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[6]=>
string(5) "hello"
[7]=>
string(5) "world"
}
?>
```
### 多維數組
```
<?php
$users = array(
array('name' => 'kate green', 'age' => 12),
array('name' => 'lucy bruce', 'age' => 11),
);
var_dump($users);
array(2) {
[0]=>
array(2) {
["name"]=>
string(10) "kate green"
["age"]=>
int(12)
}
[1]=>
array(2) {
["name"]=>
string(10) "lucy bruce"
["age"]=>
int(11)
}
}
?>
```
### 訪問數組單元
數組單元可以通過 array[key] 語法來訪問。
```
<?php
$array = array(
"foo" => "bar",
42 => 24,
"multi" => array(
"dimensional" => array(
"array" => "foo"
)
)
);
var_dump($array["foo"]); // string(3) "bar"
var_dump($array[42]); // int(24)
var_dump($array["multi"]["dimensional"]["array"]); // string(3) "foo"
?>
```
### 修改數組單元
修改數組單元可以通過 array[key] = value 語法來實現,要刪除某鍵值對,對其調用 unset() 函數。
```
<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56; // This is the same as $arr[13] = 56;
// at this point of the script
$arr["x"] = 42; // This adds a new element to
// the array with key "x"
unset($arr[5]); // This removes the element from the array
unset($arr); // This deletes the whole array
?>
```
### 數組單元遍歷
遍歷一維數組
```
<?php
$array = [
"foo" => "bar",
"bar" => "foo",
];
foearch($array as $key => $value){
echo "key is :{$key}, value is: {$value}" . PHP_EOL;
}
?>
```
遍歷二維數組
```
<?php
$users = array(
array('name' => 'kate green', 'age' => 12),
array('name' => 'lucy bruce', 'age' => 11),
);
foearch($array as $value){
echo "name is :{$value['name']}, age is: {$value['age']}" . PHP_EOL;
}
?>
```
### 實用函數
PHP內置了非常豐富的數組函數,請參考:[數組函數](http://php.net/manual/zh/ref.array.php)
- 基本語法
- PHP標記
- 指令分隔符
- 從HTML中分離
- 注釋
- 數據類型
- 布爾值
- 整數
- 浮點數
- 字符串
- 數組
- 對象
- 資源
- 空值
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 常量
- 常量語法
- 魔術常量
- 運算符
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 遞增與遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if條件結構
- switch條件結構
- while循環結構
- do-while循環結構
- for循環結構
- foreach循環結構
- 包含文件
- 函數
- 自定義函數
- 可變函數
- 匿名函數
- 遞歸函數
- 類與對象
- 基本概念
- 屬性
- 方法
- 類常量
- 構造函數和析構函數
- 訪問控制
- 繼承
- 抽象類
- 接口
- Trait
- 重載
- 對象遍歷
- 魔術方法
- Final關鍵字
- 命名空間
- 自動加載
- 錯誤處理
- 錯誤顯示
- 錯誤日志
- 錯誤報告
- 自定義錯誤處理
- 異常處理
- 異常處理機制
- 擴展異常處理類
- 字符操作
- 數組操作
- 時間操作
- 表單操作
- GET提交
- POST提交
- 文件上傳
- 會話控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件屬性
- 讀取文件
- 寫入文件
- 文件管理
- 文件鎖
- 目錄處理
- 路徑處理
- 網絡操作
- HTTP協議
- Socket操作
- CURL操作
- PDO操作
- 介紹
- 連接管理
- 預處理語句
- 事務處理
- 錯誤處理
- 圖像操作
- 正則表達式
- 標準推薦
- 包管理器
- 設計模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御