php编程中30%的地方会用到数组,可见php数组的重要性。
php中的数组
数组概述--- php是弱类型语言,故数组可存放任意多个,任意类型的数据,且可实现堆,栈,队列等数据结构的功能。数组容量可根据元素个数自动调整。
分类
索引数组---下标是整数,类似大多数语言中的数组。
关联数组---下标是无序不重复的key,映射到对应的value。
(一)数组的定义
1、直接赋值的方式声明数组
在变量名后面通过方括号“[]”中使用数字声明索引数组,使用字符串声明关联数组。
$数组变量名[索引值]=资料内容 //其中索引值(下标)可以是一个字符串或整数
在声明数组变量时,还可以在下标中使用数字和字符串混合的方式。但对一维数组来说这种方式很少使用
$contact[0]=1
$contact[“id”]=1
$contact[1]="A公司"
$contact["公司"]="A公司"
在上段代码中声明了一个数组$contact,其中下标中使用数字和字符串混合的方式。这样既可以使用索引方式访问,也可以使用关联方式访问。
声明索引数组时,如果索引值是递增的可以不在方括号内指定索引值,默认从0开始依次增加。在php中索引数组的下标值可以是非连续的,只要在初始化时指定非连续的下标值即可。
$contact[]=1; //默认的下标为0
$contact[14]=“高某”; //指定非连续的下标为14
$contact[]="A公司"; //紧跟最高的下标值并加1后的下标为15
$contact[14]=110; //下标为14的元素重新赋值
$contact[]="php"; //还是紧跟最高的下标值并加1后的下标为16
print_r($contact); //Array ( [0] => 1 [14] => 110 [15] => A公司 [16] => php )
2、使用array()语言结构声明数组
可以用 array() 语言结构来新建一个 array。它接受任意数量用逗号分隔的 键(key) => 值(value) 对。
$数组变量名=array(key1=>value1,key2=>value2,...,keyN=>valueN,) // 键(key) 可是是一个 整数或字符串值(value) 可以是任意类型的值
如果不使用=>指定下标默认为索引数组,索引值默认从0开始依次增加。如果使用array()语言结构声明数组时不希望使用默认的索引值,可以使用=>运算符指定非连续的索引值。代码如下
$contact=array(1,14=>“高某”,A公司,14=>110,php);
print_r($contact); //Array ( [0] => 1 [14] => 110 [15] => A公司 [16] => php )
注:应该始终在用字符串表示的数组索引上加上引号。例如用 $foo[‘bar‘] 而不是 $foo[bar]。但这并不意味着总是给键名加上引号。用不着给键名为常量或变量的加上引号,否则会使 PHP 不能解析它们。
(二)遍历数组
1、使用for语句循环遍历数组
使用for语句遍历数组,要求数组的下标必须是连续的数字索引,而在php中不仅可以指定非连续的数字索引值,还存在以字符串为下标的关联数组,所以在php中很少使用for语句循环遍历数组。
2、使用foreach语句循环遍历数组
foreach 语法结构提供了遍历数组的简单方式。 foreach 仅能够应用于数组和对象(php5起支持遍历对象),如果尝试应用于其他数据类型的变量,或者未初始化的变量,将导致错误。有两种语法:
foreach (array_expression as $value){
第一种
}
foreach (array_expression as $key => $value){
第二种
}
更多关于foreach的介绍参加php官方手册
3、联合使用list()、each()和while循环遍历数组
each()--返回 array 数组中当前指针位置的键/值对并向前移动数组指针。在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。
list()--把数组中的值赋给一些变量。像 array() 一样,这不是真正的函数,而是语言结构。 list() 用一步操作给一组变量进行赋值。list()仅能用于数字索引的数组并且假定数字索引从0开始。
补充说明:
each()每次读取一个元素将之拼装为数组返回,没有元素时返回false。返回的数组键名为0,1,key,value,其中0和key相等,1和value值相等。
list(),语法古怪,仅用于数字索引数组,并假设索引从0开始。list(,,var)=array;
while(list(key,value) = each($array)){}
4、使用数组的内部指针控制函数遍历数组
对于数组指针的控制,php提供了几个内建函数:
-->current() - 取得目前指针位置的内容资料
-->key() - 取得目前指针位置的索引值
-->prev() - 将数组的内部指针倒回一位
-->next() - 将数组中的内部指针向前移动一位
-->end() - 将数组的内部指针指向最后一个单元
-->reset() - 将数组的内部指针指向第一个单元
(三)预定义数组
从php4.1.0开始,php提供了一套附加的预定义数组,这些数组变量包含了来自web服务器、客户端、运行环境和用户输入的数据。它们在全局范围内自动生效,因此通常被称为自动全局变量或超全局变量。在php中用户不能自定义超全局变量,所以在自定义变量时应避免和预定的全局变量同名。常用的全局数组如下
-->$GLOBALS — 引用全局作用域中可用的全部变量
-->$_SERVER — 服务器和执行环境信息
-->$_ENV — 环境变量
-->$_GET — HTTP GET 变量
-->$_POST — HTTP POST 变量
-->$_REQUEST — HTTP Request 变量,由GET,POST.COOKIE提交至脚本的变量,不值得信任
-->$_FILES — HTTP 文件上传变量
-->$_SESSION — Session 变量
-->$_COOKIE — HTTP Cookies,经由http cookie提交至脚本的变量
(四)数组的相关处理函数
1、数组的键值操作函数
-->array_values():返回数组中所有的值
-->array_keys():返回数组中所有的键名
-->in_array():检查数组中是否存在某值,即在数组中搜索给定的值。也可用array_search()。
-->array_key_exits():检查给定的键名或索引是否存在于数组
-->array_flip():交换数组中的键和值然后返回交换后的数组。如果一个值存在多次则最有一个键名作为它的值覆盖前面的值
-->array_reverse():将数组中的元素顺序翻转,创建新的数组并返回。也就是将数组元素倒序排列。
2、统计数组元素的个数和唯一性
-->count():计算数组中的元素数目或对象中的属性个数
-->array_count_values():统计数组中所有值出现的次数
-->array_unique():删除数组中重复的值并返回新的数组
3、使用回调函数处理数组的函数
-->array_filter():用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组
-->array_walk():对数组中的每个元素应用回调函数处理,成功返回TRUE否则返回FALSE
-->array_map():将回调函数作用到给定数组的元素上(可处理多个数组),返回用户自定义函数作用后的数组
-->array_filter():用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组
-->array_filter():用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组
4、数组的排序函数
5、拆分、合并、分解和结合数组
-->array_slice():在数组中根据条件取出一段值并返回
-->array_splice():在数组中根据条件选中一段值删除它们或用其它值替换
-->array_combine():创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
-->array_merge():合并一个或多个数组
-->array_intersect():计算数组的交集
-->array_diff():计算数组的差集
-->array_slice():在数组中根据条件取出一段值并返回
6、其它常用函数
-->array_rand():从数组中随机取出一个或多个元素
-->shuffle():将数组中元素顺序打乱
-->array_sum():计算数组中所有值的和
-->range():建立一个包含指定范围单元的数组
(五)数组与数据结构
在强类型编程语言中,有专用的数据结构解决方案。通常是创建一个容器,在这个容器中可以存储任意类型的数据,并且可以根据容器中存储的数据决定容器的容量,打到可以变长的容器结构,比如链表、堆栈和队列等都是数据结构中常用的形式。在PHP中,通常都是使用数组来完成其它语言使用数据结构才能完成的工作。它是若类型语言,在同一个数组中就可以存储多种类型的数据,而且php中的数组没有长度限制,数组存储数据的容量还可以根据里面元素个数的增减自动调整。
1、使用数组实现堆栈
堆栈是数据结构的一种实现形式,数据存储时采用“先进后出”的数据结构。在php中,将数组当作一个栈使用array_push()和array_pop()两个函数即可完成数据的进栈和出栈操作。
-->array_push():将一个或多个单元压入数组末尾(入栈),然后返回新组的长度。
-->array_pop():将数组最有一个单元弹出数组(出栈)
2、使用数组实现队列
队列是数据结构的一种实现形式,数据存储时采用“先进先出”的数据结构。在php中,将数组当作一个栈使用array_push()和array_shift()两个函数即可完成数据的队列操作。
-->array_shift():将数组开头的单元移出数组,然后返回被删元素值。
-->array_shift():在数组开头插入一个或多个单元