Alan Hou的个人博客

PHP数组

数组的基础知识

一、数组的概述

1.数组的本质是管理和操作一组变量,批量处理
2.数组是复合类型
3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
4.PHP的数组可以完成其它语言数据结构的功能(链表,队列,栈,集合类)
5.数组中存有多个单元(单元在数组中称为元素),每个元素都是由下标(键)和值组成,在单独访问元素时都是通过下标(键)来进行的。

二、数组的分类

1.一维数组,二维数组,三维数组…多维数组(数组的数组)
2.PHP中有两种数组:
索引数组:下标(键)用顺序整数作为索引
关联数组:下标(键)用字符串作为索引

三、数组的多种声明方式

1.直接为数组元素赋值
索引数组声明的基本格式为

关联数组声明的基本格式为

如果不给出索引下标,就会从0开始顺序索引,如果给其中有一个或几个给出了下标,其后没给出下标的就会按其下标增1,如果后面重复了前面的下标,会重新进行赋值。混合声明时,关联数组和索引数组不相互影响
2.使用array()函数声明
基本格式为

这种方式默认声明为索引数组,如果为关联数组和索引数组指定下标,需使用”键=>值”的方式声明

声明二维数组只需在数组中嵌套数组即可,访问二维数组中的元素可通过添加两个下标,如$array[0][1]即为value2

3.使用其它的函数声明,如file()等

数组的遍历

一、使用for语句循环遍历数组

1.其它语言常用(只有这一种方式)
2.PHP中这不是首选方式
3.此类遍历要求必须是索引数组,而且下标还必须是连续的(这样下标不连续的数组及关联数组遍历时都会出现问题)

二、使用foreach语句循环遍历数组
1.循环次数由数组元素的个数决定
2.每一次循环都会将数组中的元素分别赋值给as后的变量

还有第二组使用方法

三、使用while() list() each 组合循环遍历数组

each()函数需要一个数组作为参数,返加一个下标为0,1,key,value四个下标的数组,0和key下标是当前参数数组元素的键,1和value下标是当前参数数组元素的值。默认当前元素为第一个元素,每执行一次后就会将当前元素向后移动,如果到最后一个元素再执行此函数,则返回false。

list()函数需要将一个数组赋值给这个函数如list()=array(),数组中元素需要和list()函数中的参数个数相同,数组中的每个元素值会赋值给list()中的每个参数,list()函数将每个参数转为变量。注意list只能接收索引数组,按索引下标的顺序

三者组合使用

使用这种方法无法连续遍历数组,因为each()函数走到最后一个参数返回false。可使用数组的内部指针控制函数,如next(); prev(); reset(); end(); current();来进行多次遍历等操作。

预定义数组

通常也称为自动全局变量(超全局数组)
1.包含了来自WEB服务器,客户端、运行环境和用户输入的数据相关的数组
2.这些数据比较特别,在全局范围内自动生效,
3.用户不能自定义这些数组,但这些数组在使用时与自定义数组相同

系统默认的超级全局数组有
$_GET          经由URL请求提交至脚本的变量
$_POST        经由HTTP POST 方法提交到脚本的变量
$_REQUEST 可接收经由GET, POST和COOKIE机制提交到脚本的变量,因此该数组并不值得信任,尽量不去使用
$_FILES        经由HTTP POST 文件上传而提交至脚本, 主要用于文件处理
$_COOKIE
$_SESSION
$_ENV           执行环境提交至脚本的变量
$_SERVER     变量由WEB服务器设定的,或 直接和当前脚本的执行环境相关联
$GLOBALS     只要是当前脚本有效的变量都在这里,数组键名为全局

数组的相关函数

一 数组键/值操作有关的函数
1.  array_values()  返回数组所有的值
2.  array_keys()     返回数组所有的键名或指定值的键名
3.  in_array()          搜索指定数组中是否存在相应的值(二维数组或多维数组中可判断数组是否存在)
4. array_key_exists搜索指定的数组中是否存在相应的键名
5.array_flip            交换数组中的键和值,如果原数组中值重复,由于数组的键名不能重复,后面的会把前面的覆盖
6. array_reverse   返回一个单元顺序相反的数组

二、 统计数组元素的个数和唯一性的函数
1. count()或sizeof()         计算数组中元素的个数
2. array_count_values     统计数组中所有的值出现的次数,返回值为数组
3. array_unique               移除数组中重复的值

三、使用回调函数处理数组的函数
1. array_filter()         用回调函数过滤数组中的单元
2. array_walk()        对数组中的每个成员应用用户函数
3. array_map()         将回调函数作用在给定的数组单元上

数组的排序函数

sort(), rsort(),usort(),asort(),arsort(),uasort(),ksort(), krsort(), uksort(),natsort(),natcasesort(),array_multisort()
1. 简单的数组排序
sort()按值从小到大排序, rsort()按值从大到小排序(排序完会忽略键名,保存为索引数组)
2. 根据键名对数组排序
ksort() 按键名从小到大排序,krsort()按键名从大到小排序
3. 根据元素的值对数组排序
asort()按值从小到大排序, arsort()按值从大到小排序(保留键名与值的关系)
4. 根据“自然数排序”法对数组排序(自然认知的1,2,11,22排序计算机认为的排序却是1,11,2,22)
natsort() 自然数升序排序, natcasesort()不区分大小写的自然数升序排序
5. 根据用户自定义规则对数组排序
usort() uasort() uksort()
6.多维数组的排序
array_multisort

拆分、合并、分解、接合的数组函数
1. array_slice()          从数组中取出一段
2.array_splice()
3. array_combine()   通过合并两个数组来创建一个新的数组,其中一个数组的值作为键名,另一个数组的值作为值
4. array_merge()    合并数组
5. array_intersect() 计算数组的交集
6. array_diff()           返回两个数组不同的部分

数组与数据结构的函数
1. 使用数组实现堆栈(后进先出)
array_push()  压入栈,通常会使用更高效的直接赋值的方法取代($arr[]=”value”)
array_pop()    弹出栈

2. 使用队列(先进先出)
array_unshift() 压入数据
array_shift()     弹出队列数据
unset()           释放指定数据

其它与数据操作有关的函数
array_rand()    随机从数组取出一个或多个元素(下标/键名)
shuffle()           将数组随机排序
array_sum()    对数组进行求和运算
range()           创建并返回包含指定数组范围的数组

退出移动版