数组的基础知识
一、数组的概述
1.数组的本质是管理和操作一组变量,批量处理
2.数组是复合类型
3.数组中可以存储任意长度的数据,也可以存储任意类型的数据
4.PHP的数组可以完成其它语言数据结构的功能(链表,队列,栈,集合类)
5.数组中存有多个单元(单元在数组中称为元素),每个元素都是由下标(键)和值组成,在单独访问元素时都是通过下标(键)来进行的。
二、数组的分类
1.一维数组,二维数组,三维数组…多维数组(数组的数组)
2.PHP中有两种数组:
索引数组:下标(键)用顺序整数作为索引
关联数组:下标(键)用字符串作为索引
三、数组的多种声明方式
1.直接为数组元素赋值
索引数组声明的基本格式为
$array[0]="value";
1
$array[0]="value";
关联数组声明的基本格式为
$array["id"]="value";
1
$array["id"]="value";
如果不给出索引下标,就会从0开始顺序索引,如果给其中有一个或几个给出了下标,其后没给出下标的就会按其下标增1,如果后面重复了前面的下标,会重新进行赋值。混合声明时,关联数组和索引数组不相互影响
2.使用array()函数声明
基本格式为
$arr=array("value1","value2",...);
1
$arr=array("value1","value2",...);
这种方式默认声明为索引数组,如果为关联数组和索引数组指定下标,需使用”键=>值”的方式声明
$arr=array("key1"=>"value1","key2"=>"value2","key3"=>"value3",...);
1
$arr=array("key1"=>"value1","key2"=>"value2","key3"=>"value3",...);
声明二维数组只需在数组中嵌套数组即可,访问二维数组中的元素可通过添加两个下标,如$array[0][1]即为value2
$arr=array(
array("value1","value2","value3",...);
array("value4","value5","value6",...);
array("value7","value8","value9",...);
);
1
2
3
4
5
$arr=array(
array("value1","value2","value3",...);
array("value4","value5","value6",...);
array("value7","value8","value9",...);
);
3.使用其它的函数声明,如file()等
数组的遍历
一、使用for语句循环遍历数组
1.其它语言常用(只有这一种方式)
2.PHP中这不是首选方式
3.此类遍历要求必须是索引数组,而且下标还必须是连续的(这样下标不连续的数组及关联数组遍历时都会出现问题)
for($i=0; $i
echo "\$arr[{$i}]=>".$arr[$i]."
";
}
1
2
3
for($i=0;$i
echo"\$arr[{$i}]=>".$arr[$i]."
";
}
二、使用foreach语句循环遍历数组
1.循环次数由数组元素的个数决定
2.每一次循环都会将数组中的元素分别赋值给as后的变量
foreach($arr as $var){ //$var为自定义变量
echo $var."
";
}
1
2
3
foreach($arras$var){//$var为自定义变量
echo$var."
";
}
还有第二组使用方法
foreach($arr as $key=>$var){ //$key,$var为自定义变量
echo $key."=>".$var."
";
}
1
2
3
foreach($arras$key=>$var){//$key,$var为自定义变量
echo$key."=>".$var."
";
}
三、使用while() list() each 组合循环遍历数组
each()函数需要一个数组作为参数,返加一个下标为0,1,key,value四个下标的数组,0和key下标是当前参数数组元素的键,1和value下标是当前参数数组元素的值。默认当前元素为第一个元素,每执行一次后就会将当前元素向后移动,如果到最后一个元素再执行此函数,则返回false。
while($temp=each($arr)){
echo $temp[0]."=>".$temp[1]."
";
//或echo $temp["key"]."=>".$temp["value"]."
";
}
1
2
3
4
while($temp=each($arr)){
echo$temp[0]."=>".$temp[1]."
";
//或echo $temp["key"]."=>".$temp["value"]."
";
}
list()函数需要将一个数组赋值给这个函数如list()=array(),数组中元素需要和list()函数中的参数个数相同,数组中的每个元素值会赋值给list()中的每个参数,list()函数将每个参数转为变量。注意list只能接收索引数组,按索引下标的顺序
list($var1, $var2, $var3...)=array("value1","value2","value3"...);
//只用某个值时可空出对应项,但应一一对应,如list(,,$var3...)
echo $var1."
";
echo $var2."
";
echo $var3."
";
1
2
3
4
5
list($var1,$var2,$var3...)=array("value1","value2","value3"...);
//只用某个值时可空出对应项,但应一一对应,如list(,,$var3...)
echo$var1."
";
echo$var2."
";
echo$var3."
";
三者组合使用
while(list($key,$value)=each($arr)){
echo $key."=>".$value."
";
}
1
2
3
while(list($key,$value)=each($arr)){
echo$key."=>".$value."
";
}
使用这种方法无法连续遍历数组,因为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() 创建并返回包含指定数组范围的数组