概念:数组就是一个可以存储一组或一系列数值的变量。
数组构成:数组是由一个或多个数组元素组成的
数组元素:一每个数组元素由键(Key)和值(Value)构成
键:“键”为元素的识别名称,也被称为数组下标
值: “值”为元素的内容
映射: “键”和“值”之间存在一种对应关系,称之为映射
类型划分:根据键的数据类型,可以将数组划分为索引数组和关联数组,前者使用数字作为键,后者使用字符串作为键。
1、索引数组
索引数组是指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素的情况。另外,索引数组的键名也可以自己指定。
2、关联数组
关联数组是指键名为字符串的数组。通常情况下,关联数组元素的“键”和“值”之间有一定的业务逻辑关系。因此,通常使用关联数组存储一系列具有逻辑关系的变量。关联数组的“键”都是字符串,并与“值”之间具有一一对应的关系。
使用array()函数创建数组
赋值方式
短数组定义法([] PHP 5.4起增加的)
1、数组的创建——array()语言结构方式
array()语言结构中的数组元素使用“键=>值”的方式进行表示,各元素之间使用逗号进行分割。
数组在省略键名的设置时,默认从0开始,依次递增加1,因此该数组元素的键名依次为“0、1、2”。
除此之外,还可以根据实际需求自定义数组元素的键名,如上述示例中的$sports数组变量,将其第1个元素键名设置为2,第2个元素的键名设置为4
2、数组的定义——array()语言结构方式
键只能是整型或字符串型的数据,如果是其他类型,则会执行类型自动转换
合法整型的字符串会被转为整型,如“2”转为2,而“02”则不会被转换
浮点数会被舍去小数部分直接转换成整型,如“2.6”转为2
布尔类型的true会被转为1,false转为0
NULL类型会被转为空字符串
若数组中存在相同键名的元素时,后面的元素会覆盖前面元素的值
在定义数组时,还可以定义没有任何元素的数组,以及既有索引表示方式、又有关联表示方式的数组元素。
$mixed数组的元素“b”指定了数字键名为“5”
“b”元素后的“a”元素会自动将前面最大的数字键名加1后,作为其键名,即5+1得到键名6。
3、数组的定义——赋值方式
使用赋值方式定义数组,实际上就是创建一个数组变量,然后使用赋值运算符直接给变量赋值。
赋值方式定义数组就是单独为数组元素赋值。需要注意的是,赋值方式不能定义一个空数组
4、数组的定义——短数组定义法([])
短数组定义法([])与array()语法结构相同,只需将array()替换为[]即可
访问数组
数组定义完成后,若想要查看数组中某个具体的元素,则可以通过“数组名[键]”的方式获取。
另外,若要一次查看数组中的所有元素,则可以利用前面学习过的输出语句函数print_r()和var_dump(),并且通常情况下为了使输出的函数按照一定的格式打印,查看时经常与pre标记一起使用。
遍历数组
所谓遍历数组就是一次访问数组中所有元素的操作。通常情况下,使用foreach()语句完成数组的遍历。
方式一:
方式二:
“键”和“值”的变量名可以根据实际情况随意设置
数组的删除
在数组定义完成后,有时也需要根据实际情况去除数组的某个元素。
数组操作符
数组有其专门提供的数组操作符进行对应的运算 如下表:
“+”为联合运算符,用于合并数组,如果出现下标相同的元素,则保留第1个数组内的元素。
1、顺序查找法
顺序查找法是最简单的查找法,只需按照数组中元素的保存顺序,利用待查的值与数组中的元素从前往后一个一个的进行比较,直到找到目标值或查找失败。
2、二分查找法:针对有序数组的一种查找法,它的查询效率非常高。
1、冒泡排序
冒泡排序:是计算机科学领域中较简单的排序算法。
实现原理:按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,较小或较大的元素前移。冒泡排序比较的轮数是数组长度减1,每轮比较的对数等于数组的长度减当前的轮数。
缺点:冒泡排序的效率很低,在实际中使用较少。(不过在面试的时候会问到)
1、指针操作函数
用于指向数组中的某个元素,默认情况下,指向数组的第1个元素。通过移动或改变指针的位置,可以访问数组中的任意元素。
通过each()函数访问数组
each()函数可以获取数组中当前元素的键和值,并以数组形式返回
each()函数的返回值中包含了4个数组元素,分别为关联形式和索引形式保存的键和值。
利用list()语言结构、each()函数以及while()循环可以对数组进行遍历。
指针方式遍历数组如下图:
list()结构可将给定数组中的元素依次赋值给list小括号内从左到右定义的变量。
each()函数在获取到了当前元素的键和值后,会自动将数组的指针指向下一个元素,直到没有数组元素时返回NULL。
2、数组元素操作函数
3、排序函数
除了可使用前面小节讲解的排序算法实现外。PHP还提供了内置的数组排序函数,可以轻松对数组实现排序、逆向排序、按键名排序等操作。
4、检索函数
数组中元素的查找,除了前面讲解的查找算法外,PHP还为其提供了内置函数。
例如:
in_array()和array_key_exists()函数的返回值类型均为布尔型,检测的数据存在返回true,否则返回false。
函数array_search()的返回值则是查找的“值”对应的键名。检索函数返回值类型对程序开发中的判断起着重要的作用。