## 数组(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防御