==========================
PHP的数组
==========================
一、 基本概念
-------------------------------------
1. 数组的概念:
*2. 数组的分类:根据数组的下标(索引值)类型不同分为:
索引式数组:数组下标都是整数的, 默认数组的索引下标是从0开始
关联式数组:数组下标是以字串表示的 (在其他强类型语言中有的称这个叫集合)
3.php中数组的定义:
*(1). 直接赋值: $数组名[下标]="值";
echo "<p>==============索引式数组=================<p/>";
$a[]=10;
$a[]=20;
$a[]=30;
$a[100]="cc";
$a[]="cc";
$a[]="bb";
echo "<p>==============关联式数组==================<p/>";
$p["name"]="张三";
$p["sex"]="男";
$p["age"]=20;
$p["name"]="李四"; //修改
*(2). 使用array语言结构来定义。
$a = array(10,20,30,40); //使用array函数定义一个数组(未指定下标)
$b = array("aa","bb","cc");//使用array函数定义一个数组(未指定下标)
$c = array(1=>10,2=>20,6=>80); //使用array函数,定义一个指定下标的数组
$stu = array("name"=>"张三","age"=>20); //使用array函数,定义一个指定关联下标的数组
$stu = array("name"=>"张三","age"=>20,3=>"qq","pp",'w',18=>'dd','oo');
$p = array("name"=>"张三","age"=>20,"aa","bb"); //这时数组aa和bb的下标为0,1
(3)、 使用快捷方式定义数组。(>=PHP5.3.0)
$a = [10,20,30];
$stu = ["name"=>"张三","age"=>20];
4. 多维数组:当一个数组中的元素单元还是一个数组时,称为多维数组。(几层就是几维)
如:echo $a[10]; //一维数组
echo $a[1][2]; //二维数组
$a = array(10,20,40,50); //一维数组
$b = array( array(10,20),array(30,40)...); //二维数组
如二维数组的赋值:
直接赋值:
$a[][]=10; echo $a[0][0];
$b[][]=1; echo $b[0][0];
$b[][]=2; echo $b[1][0];
$b[][]=3;
$c[1][]=4; echo $c[1][0];
$c[1][]=5; echo $c[1][1];
二、数组的遍历(迭代)输出(4种)
-------------------------------------------
1.使用循环结构:for/while/do...while
使用到一个函数:count()--获取数组的长度(元素的个数)
示例:
$a=array(10,20,30,40,50,60);
$ll=count($a);
for($i=0;$i<$ll;$i++){
echo $a[$i]." ";
}
注意:使用for循环只适合输出索引式数组,并且数组下标是从0开始连续的整数。
但是可以使用array_values()函数来弥补数组下标不足的地方。
array_keys()
示例:
echo "<br/>";
//输出非规则的数组
$a=array(2=>10,3=>40,6=>80,4=>30,"name"=>"张三");
//获取数组中的所有值,并以索引式数组返回
$list = array_values($a);
//使用for循环遍历
for($i=0;$i<count($list);$i++){
echo $list[$i]." ";
}
*2. 使用foreach遍历数组
格式:foreach(被遍历的数组 as [键=>]值){
....
}
示例://关联式数组的输出
$stu = array("name"=>"zhangsan","age"=>20,"sex"=>"man");
foreach($stu as $k=>$v){
echo "{$k}=>{$v}<br/>";
}
3. 联合while each reset list遍历数组(半自动方式)
each()--获取当前数组指针位置的键和值,并以关联和索引两种方式返回,并且指针向下移动一位。
reset()--将数组指针移至首位。
list()--直接解析赋过来的数组中的索引下标对应的值,解析是从0开始
list($v1,$v2)=array("key"="name",0=>"name","value"="zhangsan",1=>"zhangsan");
echo $v1.":".$v2; //name:zhangsan
示例:
//使用while、each、reset、list解析遍历的结果
$stu = array("name"=>"zhangsan","age"=>20,"sex"=>"man");
reset($stu);
while(list($k,$v)=each($stu)){
echo "{$k}=>{$v}<br/>";
}
4. 使用下面的函数来遍历数组(纯手工遍历数组)
reset()-- 将数组的内部指针指向第一个单元
end() — 将数组的内部指针指向最后一个单元
next() — 将数组中的内部指针向前移动一位
prev() — 将数组的内部指针倒回一位
current() — 返回数组中的当前单元
key() — 从关联数组中取得键名
do....while循环
示例:
$a = array(10,20,30,40,50,60);
reset($a);//将数组指针移至首位
do{
echo key($a)."=>".current($a)."<br/>"; //获取键和值
}while(next($a));
//倒着输出
三、超全局数组:
---------------------------------------------------
$GLOBALS 包含以下所有信息
*$_SERVER 服务器和执行环境信息
*$_GET 通过 URL 参数传递给当前脚本的变量的数组。
*$_POST 通过 HTTP POST 方法传递给当前脚本的变量的数组。
*$_FILES 保存文件上传信息(在文件处理章节中细讲)
(cookie和session在会话跟踪章节中细讲)
*$_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组(用于储存论坛、文库、博客等登陆信息)
*$_SESSION 当前脚本可用 SESSION 变量的数组。(用于网站购物车等的信息存储)
*$_REQUEST 包含get、post和cookie
$_ENV 存储的是系统环境变量信息
*$_SERVER["HTTP_REFERER"]--上一页面的url地址
$_SERVER["SERVER_NAME"]--服务器的主机名
*$_SERVER["SERVER_ADDR"]--服务器端的IP地址
$_SERVER["SERVER_PORT"]--服务器端的端口
*$_SERVER["REMOTE_ADDR"]--客户端的IP
$_SERVER["DOCUMENT_ROOT"]--服务器的web目录路径
*$_SERVER["REQUEST_URI"];//--URL地址
echo $_GET["name"];
echo $_REQUEST["name"]; //获取信息比上面get的会慢一些
form表单的get提交方式:url地址可见,相对不安全,长度受限,可以做为标签连接使用。
form表单的post提交方式:url地址不可见,相对安全,长度不受限。
四、 数组的相关函数
------------------------------
1. 数组的键和值的操作函数
*array_values — 返回数组中所有的值
array_keys — 返回数组中所有的键名
array_flip — 交换数组中的键和值
*in_array — 检查数组中是否存在某个值
array_reverse — 返回一个单元顺序相反的数组
*is_array() --判断是否是数组
2. 数组的统计相关函数
*count -- 计算数组中的单元数目或对象中的属性个数
array_count_values -- 统计数组中所有的值出现的次数
*array_unique -- 移除数组中重复的值
3. 带回调函数的
array_filter -- 用回调函数过滤数组中的单元
array_walk -- 对数组中的每个成员应用用户函数
array_map -- 将回调函数作用到给定数组的单元上
4. 数组的排序
*sort -- 对数组排序(升序)
rsort -- 对数组逆向排序(降序)
asort -- 对数组进行排序并保持索引关系(关联数组排序)
arsort -- 对数组进行逆向排序并保持索引关系
usort -- 使用用户自定义的比较函数对数组中的值进行排序
uasort -- 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
ksort -- 对数组按照键名排序
krsort -- 对数组按照键名逆向排序
uksort -- 使用用户自定义的比较函数对数组中的键名进行排序
*natsort -- 用“自然排序”算法对数组排序
natcasesort -- 用“自然排序”算法对数组进行不区分大小写字母的排序
5.拆分、合并、分解与结合数组
array_slice -- 从数组中取出一段
array_splice -- 把数组中的一部分去掉并用其它值取代
array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
*array_merge -- 合并一个或多个数组
*array_intersect -- 计算数组的交集
array_diff -- 计算数组的差集
6.数组与数据结构
*array_pop -- 将数组最后一个单元弹出(出栈)
array_push -- 将一个或多个单元压入数组的末尾(入栈)
array_shift -- 将数组开头的单元移出数组
array_unshift -- 在数组开头插入一个或多个单元
7.其他有用的数组处理函数
array_rand --从数组中随机取出一个或多个单元
shuffle -- 将数组打乱
range -- 建立一个包含指定范围单元的数组