1. 数组介绍
数组是一组数据的集合,这组数据按照一定的规则组织起来,形成一个可操作的整体。
PHP 中的 array 实际上是一个有序映射。
映射是一种把 values 关联到 keys 的类型。
此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表hash table(映射的实现)、字典、集合、堆栈、队列等等。
由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的。
2. PHP数组分类
根据数组下标不同,PHP中的数组可以分为两类
- 索引数组
 - 关联数组
 
索引数组就是传统的数组定义方式 . 通过下标的方式保存和操作数组中的元素.
关联数组更像是其它语言中的字典,或对象, 使用键值对的方式保存和操作数组中的元素.
以下笔记 中,都按对比的方式 , 讲解两种数组的操作.
3. 数组的定义
定义空数组
在定义空数组时,不会区分数组是索引数组还是关联数据,完全看后期的使用方式<?phpheader("content-type:text/html;charset=utf-8");// 定义空数组$arr1 = array();echo gettype($arr1);echo "<br>";$arr2 = [];echo gettype($arr2);echo "<br>";?>
定义带元素的数组
- 索引数组
```php <?php // 定义带元素的数组 $arr3 = array(1,2,3,4); var_dump($arr3); echo “
“; 
// 由于PHP是弱类型语言,数组中的元素可以是任意类型 $arr4 = [“cat”, “dog”,”pig”]; var_dump($arr4); echo “
“;- 索引数组
 
?>
- 关联数组<br />key 可以是 integer 或者 string。value 可以是任意类型。```php<?phpheader("content-type:text/html;charset=utf-8");//// 定义带元素的数组$arr1 = array( "Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日");var_dump($arr1);echo "<br>";// 由于PHP是弱类型语言,数组中的元素可以是任意类型$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];var_dump($arr2);echo "<br>";// 定义
4.向数组中添加元素
索引数组
<?phpheader("content-type:text/html;charset=utf-8");//$arr1 = array();var_dump($arr1);echo "<br>";// 指定下标方式添加数据$arr1[0] = 111;var_dump($arr1);echo "<br>";$arr1[1] = 222;var_dump($arr1);echo "<br>";// 不指定下标,追加到最后$arr1[] = 333;var_dump($arr1);echo "<br>";$arr1[5] = 555;var_dump($arr1);echo "<br>";// 这个元素的下标是多少?$arr1[] = 666;var_dump($arr1);echo "<br>";?>
关联数组
<?phpheader("content-type:text/html;charset=utf-8");// 由于PHP是弱类型语言,数组中的元素可以是任意类型$arr2 = [];var_dump($arr2);echo "<br>";$arr2["one"] = 111;var_dump($arr2);echo "<br>";$arr2["two"] = 222;var_dump($arr2);echo "<br>";// 关联数组中允许使用混合key, 但是只能是int 或string// 如果不写key, 默认从 0 开始存放,如果前面有数字key,则接续保存$arr2[] = 333;var_dump($arr2);echo "<br>";$arr2[] = 444;var_dump($arr2);echo "<br>";?>
5. 获取数组中元素个数
count(Countable|array $value, int $mode = COUNT_NORMAL): int
统计出数组里的所有元素的数量
<?phpheader("content-type:text/html;charset=utf-8");$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");echo count($arr1);echo "<br>";// 由于PHP是弱类型语言,数组中的元素可以是任意类型$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];echo count($arr2);?>
6. 获取数组中的元素
对数组进行取值时,不区分数组类型
数组名[索引/下标];
<?phpheader("content-type:text/html;charset=utf-8");$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");echo $arr1[0];echo "<br>";echo $arr1[5];echo "<br>";// 索引数组在访问下标越界时,会报错// echo $arr1[10];// echo "<br>";// 由于PHP是弱类型语言,数组中的元素可以是任意类型$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];echo $arr2["Monday"];echo "<br>";echo $arr2["Saturday"];echo "<br>";// 关联数组在使用一个未定义的key取值时会报错// echo $arr2["xxx"];// echo "<br>";?>
7. 修改数组中的元素值
数组名[索引/下标] = 值;
修改数据和添加数组类似,如果指定 的索引或 key 不存在,就是添加, 存在就是修改.
<?phpheader("content-type:text/html;charset=utf-8");$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");var_dump($arr1);echo "<br>";$arr1[0] = "星期一";var_dump($arr1);echo "<br>";$arr1[0] = "周一";var_dump($arr1);echo "<br>";$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];var_dump($arr2);echo "<br>";$arr2["Monday"] = "星期一";var_dump($arr2);echo "<br>";$arr2["Monday"] = "周一";var_dump($arr2);echo "<br>";?>
8. 删除数组/数组中的元素
在php中, 可以使用 unset() 函数来删除数组或数组中元素的值.
<?phpheader("content-type:text/html;charset=utf-8");$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");var_dump($arr1);echo "<br>";unset($arr1[0]);var_dump($arr1);echo "<br>";// 删除之后再使用会报错unset($arr1);var_dump($arr1);echo "<br>";$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];var_dump($arr2);echo "<br>";unset($arr2["Monday"]);var_dump($arr2);echo "<br>";// 删除之后再使用会报错unset($arr2);var_dump($arr2);echo "<br>";?>
9. 遍历数组
foreach 语法结构提供了遍历数组的简单方式。
foreach (iterable_expression as $value)statementforeach (iterable_expression as $key => $value)statement
第一种格式遍历给定的 iterable_expression 迭代器。每次循环中,当前单元的值被赋给 $value。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
<?phpheader("content-type:text/html;charset=utf-8");$arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");// 不带下标遍历foreach ($arr1 as $val) {echo "值:" . $val . "<br>";}// 带下标遍历foreach ($arr1 as $i => $val) {echo "下标:" . $i . "-> 值:" . $val . "<br>";}echo "<hr>";$arr2 = ["Monday"=>"星期一","Tuesday"=>"星期二","Wednesday"=>"星期三","Thursday"=>"星期四","Friday"=>"星期五","Saturday"=>"星期六","Sunday"=>"星期日"];// 不带下标遍历foreach ($arr2 as $val) {echo "值:" . $val . "<br>";}// 带下标遍历foreach ($arr2 as $key => $val) {echo "key:" . $key . "-> value:" . $val . "<br>";}?>
10. 多维数组
在 PHP 中,一个数组中的值可以是另一个数组,另一个数组中的值也可以是一个数组,也就是说数组可以嵌套。
一维数组:没有发生嵌套的普通数组。
二维数组:两层数组的嵌套。
三维数组:三层数组的嵌套。
多维数组:多层数组的嵌套。
定义二维数组
$arr = array(array("id"=>1,"userName"=>"张三","sex"=>"男","age"=>15),array("id"=>2,"userName"=>"李四","sex"=>"女","age"=>14),array("id"=>3,"userName"=>"王五","sex"=>"女","age"=>16),array("id"=>4,"userName"=>"赵六","sex"=>"男","age"=>15),array("id"=>5,"userName"=>"田七","sex"=>"女","age"=>16));
二维数组取值
echo $arr[0][id];echo $arr[3]["username"];
