PHP之路 PHP基础【第四篇】数组
数组的分类
在PHP中有两种数组:索引数组和关联数组。 索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。 关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据
数组的定义
直接赋值
<?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 "<hr/>"; //不指定数组下标来去定义数组(默认数组下标从0开始自增)索引式数组。 $b[]=10; $b[]=20; $b[10]=40; $b[]=30; //不指定数组下标时,数组的下标值默认最大值加1。 print_r($b); //Array ( [0] => 10 [1] => 20 [10] => 40 [11] => 30 ) echo "<hr/>"; //关联数组的直接赋值 $stu['name']="张三"; $stu['sex']="男"; $stu['age']=20; $stu[]=100; //默认下标从0开始 print_r($stu); //Array ( [name] => 张三 [sex] => 男 [age] => 20 [0] => 100 ) echo "<hr/>"; //循环1到10的值,并放到一个数组c中 for($i=1;$i<=10;$i++){ $c[]=$i; } print_r($c);

array()
<?php header("Content-Type: text/html;charset=utf-8"); //使用array()语言结构定义数组 //1. 使用array()不指定下标方式定义一个索引式数组 $a = array(10,20,30,40); print_r($a); echo "<hr/>"; //2. 使用array()指定下标来定义一个索引式数组 $b = array(0=>10,1=>20,2=>30,3=>40); print_r($b); echo "<hr/>"; //3. 使用array()定义关联式数组 $stu = array("name"=>"张三","sex"=>"男","age"=>20); print_r($stu);
<?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 "<pre>"; print_r($list); /* //使用array定义多维数组 $a =array( 0=>array(10,20,30), 1=>array(40,50,60) ); echo "<pre>"; 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"); */

快捷方式
<?php header("Content-Type: text/html;charset=utf-8"); //第三种定义数组方式:使用快捷方式 //不指定下标定义数组 $a=[10,20,30,40]; print_r($a); echo "<hr/>"; //指定下标定义数组 $stu = ['name'=>'zhangsan','sex'=>'man','age'=>20]; print_r($stu);

快速创建数组
<?php echo '<pre>'; //快速创建数组 //快速创建下标连续的索引数组 $arr=range(1,10); print_r($arr); $arr=range(-10,5); print_r($arr); //手动指定步长的数组 $arr=range(1,10,2); print_r($arr); echo '<hr/>'; $arr=range('a','z');//97~122 print_r($arr); echo '<hr/>'; for($i=97;$i<=122;$i++){ $arr1[]=chr($i); } print_r($arr1); echo '<hr/>'; //快速创建关联数组 $username='king'; $age=12; $email='382771946@qq.com'; $userInfo1=array( 'username'=>$username, 'age'=>$age, 'email'=>$email ); print_r($userInfo1); $userInfo2['username']=$username; $userInfo2['age']=$age; $userInfo2['email']=$email; print_r($userInfo2); //注意,通过compact创建数组的时候,只能写已经存在的变量的名称,不需要加$ $a=12; $b=false; $c=null; $userInfo3=compact('username','age','email','a','b','c'); print_r($userInfo3);
常量数组
<?php //定义常量数组 //const在5.6之后可以定义常量 const ARR1=array('a','b','c'); print_r(ARR1); const ARR2=[ 'a'=>'aa', 'b'=>'bb' ]; print_r(ARR2); echo '<hr/>'; //通过define()定义常量数组 define('TEST1',array('a','b','c')); print_r(TEST1); define('TEST2',['d','e','f']); print_r(TEST2); define('CUSTOM_UPLOAD_ERRORS',[ 'ext_error'=>'上传文件扩展名不符合规范', 'maxsize_error'=>'上传文件大小不符合规范' ]); print_r(CUSTOM_UPLOAD_ERRORS); echo '<hr/>'; echo CUSTOM_UPLOAD_ERRORS['ext_error'];
数组操作
<?php header('content-type:text/html;charset=utf-8'); echo '<pre>'; //数组使用--查找元素 $arr=['a','b','c','d']; print_r($arr); echo $arr[2]; echo '<br/>'; $res=$arr[0]; echo $res; echo '<br/>'; $arr=[ 'username'=>'king', 'age'=>12, 'email'=>'382771946@qq.com' ]; echo '用户名为:',$arr['username'],'<br/>'; echo '年龄:',$arr['age'],'<br/>'; echo '邮箱:',$arr['email'],'<br/>'; //二维的索引+关联 echo '<hr/>'; $users[]=['id'=>1,'username'=>'king1','age'=>21]; $users[]=['id'=>2,'username'=>'king2','age'=>51]; $users[]=['id'=>3,'username'=>'king3','age'=>11]; print_r($users); echo $users[1]['username']; echo '<hr/>'; echo $users[2]['age']; echo '<br/>'; echo $users{2}{'age'}; echo '<hr/>'; //向数组中添加元素 $arr=['a','b','c']; $arr[]='d'; $arr['test']='this is a test'; $arr[56]='hello world'; $arr[0]='aaaa'; print_r($arr); //更新操作 $arr[3]='dddd'; print_r($arr); //删除指定元素 unset($arr['test']); print_r($arr); unset($arr[56]); print_r($arr); echo '<hr/>'; //针对于二维数组的操作:增删改查操作 $courses[]=['id'=>1,'courseName'=>'php','courseDesc'=>'PHP是最好的语言']; $courses[]=['id'=>2,'courseName'=>'javascript','courseDesc'=>'javascript是最好的语言']; $courses[]=['id'=>3,'courseName'=>'go','courseDesc'=>'go是最好的语言']; print_r($courses); echo $courses[0]['courseName'],'--',$courses[0]['courseDesc'],'<br/>'; $courses[1]['courseName']='js'; echo $courses[1]['courseName'],'<br/>'; unset($courses[2]['courseName']); print_r($courses); unset($courses[1]); print_r($courses); echo '<hr/>'; function test(){ return ['a','b','c']; } $res=test(); echo $res[1]; echo '<br/>'; echo test()[1]; echo '</pre>';
数组遍历
for循环
<?php header("Content-Type: text/html;charset=utf-8"); //数组的遍历方式1:使用for循环 //其中遍历也叫迭代,就是循环一遍,一个不漏地访问一遍。 $a = array(10,20,30,40,50); //使用count获取数组长度 echo "数组长度:".count($a)."<br/>"; //使用for循环遍历 for($i=0,$w=count($a);$i<$w;$i++){ echo $a[$i]." "; //输出下标对应的数组值 }

foreach
<?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 "<hr/>"; //带下标的数组遍历输出 foreach($a as $k=>$v){ echo $k."=>".$v."<br/>"; } $arr=array("one"=>"aaa", "two"=>"bbb", "three"=>"cccc"); while($sz=each($arr)){ //echo $sz[0]."===>".$sz[1]."<br>"; echo $sz["key"]."===>".$sz["value"]."<br>"; }

超全局数组
$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地址不可见,相对安全,长度不受限。
<?php
header("Content-Type: text/html;charset=utf-8");
//超全局数组:$_SERVER;
echo "客户端的IP地址:".$_SERVER['REMOTE_ADDR']."<br/>";
echo "客户端的浏览器信息:".$_SERVER['HTTP_USER_AGENT']."<br/>";
echo "服务器端的IP地址:".$_SERVER['SERVER_ADDR']."<br/>";
echo "WEB根目录:".$_SERVER['DOCUMENT_ROOT']."<br/>";
echo "当前URL地址:".$_SERVER['REQUEST_URI']."<br/>";
echo "<pre>";
print_r($_SERVER);
echo "</pre>";

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>我的HTML文档</title>
</head>
<body>
<h3>form表单get提交</h3>
<form action="1.php" method="get">
姓名:<input type="text" name="name"/><br/><br/>
年龄:<input type="text" name="age"/><br/><br/>
<input type="submit" value="提交"/>
</form>
<br/><br/>
<h3>form表单post提交</h3>
<form action="1.php" method="post">
姓名:<input type="text" name="name"/><br/><br/>
年龄:<input type="text" name="age"/><br/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
<?php header("Content-Type: text/html;charset=utf-8"); //超全局数组:$_ENV,$_GET,$_POST,$_REQUEST; //print_r($_ENV); //在php5.2.6可用 echo "_GET获取信息:<br/>"; echo "姓名:".$_GET['name']."<br/>"; echo "年龄:".$_GET['age']."<br/>"; echo "<hr/>"; echo "_POST获取信息:<br/>"; echo "姓名:".$_POST['name']."<br/>"; echo "年龄:".$_POST['age']."<br/>"; echo "<hr/>"; echo "_REQUEST获取信息:<br/>"; echo "姓名:".$_REQUEST['name']."<br/>"; echo "年龄:".$_REQUEST['age']."<br/>"; echo "<hr/>"; echo "<h3>GLOBALS信息</h3>"; echo "<pre>"; 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 -- 计算数组的差集
<?php //php数组的排序:--普通排序 $a=array(10,30,20,50,40); echo "排序前:"; print_r($a); //sort($a); //升序, 重组数组下标。 //rsort($a); //降序, 重组数组下标。 //asort($a); //升序, 保持原有数组下标。 arsort($a); //降序, 保持原有数组下标。 echo "<hr/>"; echo "排序后:"; print_r($a);
<?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 "<pre>"; echo "排序前:"; print_r($list); //自定义排序(按年龄从大到小排序) usort($list,function($v1,$v2){ if($v1['age']<$v2['age']){ return 1; }else{ return -1; } }); echo "<hr/>"; echo "排序后:"; print_r($list);
<?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 "<hr/>"; //将上面a数组中的BB,CC 单元换成 10,20,30。 $b = array_splice($a,1,2,array(10,20,30)); echo "替换后:"; print_r($a); echo "<br/>"; echo "换掉的内容:"; print_r($b);
<?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 "<hr/>"; //使用array_merge 合并数组 $c = array_merge($a,$b); //将参数数组首尾相连合并出新数组 print_r($c);
<?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 "<hr/>"; //计算数组a和b的差集 $c = array_diff($a,$b);//找出a数组中有的,b数组中没有的。 print_r($c);
谢谢

浙公网安备 33010602011771号