数组的分类
在PHP中有两种数组:索引数组和关联数组。
索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。
关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据
数组的定义
直接赋值
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //数组的定义方式之一:直接赋值方式 //通过指定数组下标来定义索引式数组 $a[0]=10; $a[1]=20; $a[2]=30; $a[5]=40; //php的数组下标可以不连续 $a[2]=60; //下标重复称修改值 print_r($a); //Array ( [0] => 10 [1] => 20 [2] => 60 [5] => 40 ) echo "
"; //不指定数组下标来去定义数组(默认数组下标从0开始自增)索引式数组。 $b[]=10; $b[]=20; $b[10]=40; $b[]=30; //不指定数组下标时,数组的下标值默认最大值加1。 print_r($b); //Array ( [0] => 10 [1] => 20 [10] => 40 [11] => 30 ) echo "
"; //关联数组的直接赋值 $stu['name']="张三"; $stu['sex']="男"; $stu['age']=20; $stu[]=100; //默认下标从0开始 print_r($stu); //Array ( [name] => 张三 [sex] => 男 [age] => 20 [0] => 100 ) echo "
"; //循环1到10的值,并放到一个数组c中 for($i=1;$i<=10;$i++){ $c[]=$i; } print_r($c);
array()
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //使用array()语言结构定义数组 //1. 使用array()不指定下标方式定义一个索引式数组 $a = array(10,20,30,40); print_r($a); echo "
"; //2. 使用array()指定下标来定义一个索引式数组 $b = array(0=>10,1=>20,2=>30,3=>40); print_r($b); echo "
"; //3. 使用array()定义关联式数组 $stu = array("name"=>"张三","sex"=>"男","age"=>20); print_r($stu);
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //数组的定义:使用array()语言结构定义数组 //真实网站中的数据格式 $list = array( array("name"=>"诺基亚8100","price"=>1280.00,"num"=>20), array("name"=>"三星n8","price"=>2200.00,"num"=>30), array("name"=>"苹果6","price"=>5288.00,"num"=>10), ); echo ""; print_r($list); /* //使用array定义多维数组 $a =array( 0=>array(10,20,30), 1=>array(40,50,60) ); echo ""; print_r($a); echo $a[0][1]; //20; echo $a[1][1]; //50 echo $a[1][2]; //60*/ /* //使用array不指定下标定义一个默认下标的索引式数组。 $a = array(10,20,30,40,50); //使用array自定索引式下标定义数组。 $b = array(0=>10,1=>20,2=>30); //使用array定义一个关联式数组。 $c = array("a"=>"AA","b"=>"BB","c"=>"CC"); */
快捷方式
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //第三种定义数组方式:使用快捷方式 //不指定下标定义数组 $a=[10,20,30,40]; print_r($a); echo "
"; //指定下标定义数组 $stu = ['name'=>'zhangsan','sex'=>'man','age'=>20]; print_r($stu);
数组遍历
for循环
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //数组的遍历方式1:使用for循环 //其中遍历也叫迭代,就是循环一遍,一个不漏地访问一遍。 $a = array(10,20,30,40,50); //使用count获取数组长度 echo "数组长度:".count($a)."
"; //使用for循环遍历 for($i=0,$w=count($a);$i<$w;$i++){ echo $a[$i]." "; //输出下标对应的数组值 }
foreach
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //使用foreach()对数组的遍历。 $a=array(10,20,30,6=>40,50); //不带下标的数组遍历输出 foreach($a as $v){ echo $v." "; } echo "
"; //带下标的数组遍历输出 foreach($a as $k=>$v){ echo $k."=>".$v."
"; } $arr=array("one"=>"aaa", "two"=>"bbb", "three"=>"cccc"); while($sz=each($arr)){ //echo $sz[0]."===>".$sz[1]."
"; echo $sz["key"]."===>".$sz["value"]."
"; }
超全局数组
$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地址不可见,相对安全,长度不受限。
";
echo "客户端的浏览器信息:".$_SERVER['HTTP_USER_AGENT']."
";
echo "服务器端的IP地址:".$_SERVER['SERVER_ADDR']."
";
echo "WEB根目录:".$_SERVER['DOCUMENT_ROOT']."
";
echo "当前URL地址:".$_SERVER['REQUEST_URI']."
";
echo "";
print_r($_SERVER);
echo "
";
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
我的HTML文档 form表单get提交
form表单post提交
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php header("Content-Type: text/html;charset=utf-8"); //超全局数组:$_ENV,$_GET,$_POST,$_REQUEST; //print_r($_ENV); //在php5.2.6可用 echo "_GET获取信息:
"; echo "姓名:".$_GET['name']."
"; echo "年龄:".$_GET['age']."
"; echo "
"; echo "_POST获取信息:
"; echo "姓名:".$_POST['name']."
"; echo "年龄:".$_POST['age']."
"; echo "
"; echo "_REQUEST获取信息:
"; echo "姓名:".$_REQUEST['name']."
"; echo "年龄:".$_REQUEST['age']."
"; echo "
"; echo "GLOBALS信息
"; echo ""; print_r($GLOBALS);
数组的相关函数
数组的键和值
array_values — 返回数组中所有的值
array_keys — 返回数组中所有的键名
array_flip — 交换数组中的键和值
in_array — 检查数组中是否存在某个值
array_reverse — 返回一个单元顺序相反的数组
is_array() --判断是否是数组
数组的统计
count -- 计算数组中的单元数目或对象中的属性个数
array_count_values -- 统计数组中所有的值出现的次数
array_unique -- 移除数组中重复的值
带回调函数
array_filter -- 用回调函数过滤数组中的单元
array_walk -- 对数组中的每个成员应用用户函数
array_map -- 将回调函数作用到给定数组的单元上
排序
sort -- 对数组排序(升序)
rsort -- 对数组逆向排序(降序)
asort -- 对数组进行排序并保持索引关系(关联数组排序)
arsort -- 对数组进行逆向排序并保持索引关系
usort -- 使用用户自定义的比较函数对数组中的值进行排序
uasort -- 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
ksort -- 对数组按照键名排序
krsort -- 对数组按照键名逆向排序
uksort -- 使用用户自定义的比较函数对数组中的键名进行排序
natsort -- 用“自然排序”算法对数组排序
natcasesort -- 用“自然排序”算法对数组进行不区分大小写字母的排序
array_multisort -- 对多个数组或多维数组进行排序(了解)
array_slice -- 从数组中取出一段
array_splice -- 把数组中的一部分去掉并用其它值取代
array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_merge -- 合并一个或多个数组
array_intersect -- 计算数组的交集
array_diff -- 计算数组的差集
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //php数组的排序:--普通排序 $a=array(10,30,20,50,40); echo "排序前:"; print_r($a); //sort($a); //升序, 重组数组下标。 //rsort($a); //降序, 重组数组下标。 //asort($a); //升序, 保持原有数组下标。 arsort($a); //降序, 保持原有数组下标。 echo "
"; echo "排序后:"; print_r($a);
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //php数组的排序:-- 自定义排序 $list = array( array("name"=>"zhangsan","age"=>20), array("name"=>"lisi","age"=>22), array("name"=>"wangwu","age"=>21), array("name"=>"zhaoliu","age"=>24), array("name"=>"tianqi","age"=>19), ); echo ""; echo "排序前:"; print_r($list); //自定义排序(按年龄从大到小排序) usort($list,function($v1,$v2){ if($v1['age']<$v2['age']){ return 1; }else{ return -1; } }); echo "
"; echo "排序后:"; print_r($list);
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //数组的提取,拆分和组合操作 /* array_slice -- 从数组中取出一段 array_splice -- 把数组中的一部分去掉并用其它值取代 array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 *array_merge -- 合并一个或多个数组 */ $a = array("a"=>"AA","b"=>"BB","c"=>"CC","d"=>"DD","e"=>"EE"); //要求从上面数组中取出 BB CC 和DD单元 $b = array_slice($a,1,3); print_r($b); echo "
"; //将上面a数组中的BB,CC 单元换成 10,20,30。 $b = array_splice($a,1,2,array(10,20,30)); echo "替换后:"; print_r($a); echo "
"; echo "换掉的内容:"; print_r($b);
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //数组的提取,拆分和组合操作 /* array_slice -- 从数组中取出一段 array_splice -- 把数组中的一部分去掉并用其它值取代 array_combine -- 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 *array_merge -- 合并一个或多个数组 */ //合并数组 $a=array("a","b","c"); $b=array(100,200,300); //使用array_combine()合并出一个新数组 $c = array_combine($a,$b); //注意:a和b参数数组长度必须一致 //将a参数作为键,将b数组参数作为值合并出一个新数组 print_r($c); echo "
"; //使用array_merge 合并数组 $c = array_merge($a,$b); //将参数数组首尾相连合并出新数组 print_r($c);
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
php //数组的交集和差集 $a=array(10,20,30,40,50,60); $b=array(30,50,60,70,80); //计算数组a和b的交集 $c = array_intersect($a,$b); print_r($c); echo "
"; //计算数组a和b的差集 $c = array_diff($a,$b);//找出a数组中有的,b数组中没有的。 print_r($c);