数组是特殊的变量,它能够同时保存一个以上的值。php
***关键词:数组基础、数组遍历、超全局数组、数组功能、数组函数。算法
下面来和你们分享一下有关PHP的数组基础知识,但愿对你PHP的学习有所帮助~数组
1、PHP数组基础部分 |
按照下标的不一样,PHP数组分为关联数组和索引数组;
索引数组:下标从0开始,依次增加
关联数组:下标为字符串格式,每一个下标字符串与数组的值一一关联对应(相似对象的键值对)服务器
代码演示:cookie
1 $arr1 = array(1,2,3,4,5,6,7);//索引数组 2 var_dump($arr1); 3 4 $arr2 = array("one"=>1,"two"=>2,"three"=>3);//关联数组 5 var_dump($arr2); 6 7 $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"hahah"=>9); 8 var_dump($arr3);
一、数组中,能够同时存在索引数组与关联数组。
array(1,2,3,"one"=>4); session
二、数组中,全部的索引数组,若是不加指定,会去掉关联项,默认增加(即,关联数组不占索引位);
array(1,2,"one"=>3,4,5);//1,2,4,5的索引--->0/1/2/3app
三、若是,关联数组的key,是纯十进制整数字符串,
则会将此数字转为索引数组的索引值;("10.0"/"08"等格式,仍然是关联数组,不转为索引)
array(1,2,"one"=>3,"9"=>4,"010"=>5);//1,2,4的索引--->0/1/9ide
四、若是,手动指定关联数组的key,索引数组的下标,若是与前面已有的key或下标重复,则后制定的值会覆盖以前的值;
array(1,"one"=>2,0=>5,"one"=>6);--->打印数组,0=>5,"one"=>6函数
五、若是手动指定索引数组下标,则后续自增加下标,会按照以前下标最大值,依次增加。
array(1,2,7=>3,4);--->1,2,3,4的下标--->0/1/7/8post
一、直接赋值声明
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
$arr[] = 1;
var_dump($arr);
二、[]字面量声明(PHP5.4版本以后能用)
$arr = [1,2,3,4,"one"=>5,6];
var_dump($arr);
三、Array()声明 没有new关键字
$arr = array(1,2,3,4,5);
var_dump($arr);
PHP中,数组支持[]和{}读取下标。
①数组的一个值,依然是一个数组,咱们称这种数组为多维数组;
②多维数组,不要求全部的项都是数组,能够是数组与普通值的混合;
③多维数组,也不要求每一个子数组的个数限制,能够是任意的长度。
使用多维数组,必定要注意,数组中分隔用逗号!
原则上,多维数组通常不超过3层使用!
三维数组代码演示以下:
1 $H51701 = array( 2 "group1"=>array( 3 array("name"=>"张三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>15,"sex"=>"男"), 5 array("name"=>"王二","age"=>13,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"张三","age"=>15,"sex"=>"男"), 9 array("name"=>"李四","age"=>15,"sex"=>"男"), 10 array("name"=>"王二","age"=>14,"sex"=>"男") 11 ), 12 "group3"=>array( 13 array("name"=>"张三","age"=>14,"sex"=>"男"), 14 array("name"=>"李四","age"=>18,"sex"=>"男"), 15 array("name"=>"王二","age"=>24,"sex"=>"男") 16 ), 17 ); 18 var_dump($H51701);
2、数组遍历 |
一、使用for循环遍历数组
count($arr);用于统计数组元素的个数
for循环只能用于遍历,纯索引数组!
若是存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,致使数组越界!
代码以下:
1 $arr = array(1,2,3,"one"=>4,5,6,7); 2 $num = count($arr); 3 echo"数组元素的个数{$num}<br/>"; 4 for($i=0;$i<$num;$i++){ 5 echo "{$i}==>{$arr[$i]}<br/>"; 6 }
二、forEach循环遍历数组
foreach能够遍历任何类型的数组!
代码以下:
1 $arr = array(1,2,3,"one"=>4,5,6,7); 2 foreach($arr as $key=>$item){ 3 echo "{$key}==>{$item}<br/>"; 4 }
下面咱们来作一个数组遍历的小练习~看代码~
1 $arr = array( 2 "group1"=>array( 3 array("name"=>"张三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>12,"sex"=>"男"), 5 array("name"=>"王二","age"=>18,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"张三","age"=>14,"sex"=>"男"), 9 array("name"=>"李四","age"=>16,"sex"=>"男"), 10 array("name"=>"王二","age"=>19,"sex"=>"男") 11 ), 12 "group3"=>array( 13 array("name"=>"张三","age"=>14,"sex"=>"男"), 14 array("name"=>"李四","age"=>12,"sex"=>"男"), 15 array("name"=>"王二","age"=>13,"sex"=>"男") 16 ), 17 ); 18 19 foreach($arr as $key=>$value){ 20 echo "{$key}<br/>"; 21 foreach($value as $key1=>$value1){ 22 echo "第".($key1+1)."个同窗<br/>"; 23 foreach($value1 as $key2=>$value2){ 24 echo "{$key2}==>{$value2}<br/>"; 25 } 26 echo"<br/>"; 27 } 28 echo"----------------------<br/>"; 29 }
三、使用list(),each(),while()遍历数组
list():用于将数组的每个值,赋值给list函数的每个参数。(list函数的参数,必须<=数组的元素个数);
eg:list($a,$b,$c) = [1,2,3]; --->$a=1; $b=2; $c=3;
注意:
①list()在解析数组时,只解析索引数组;
②list能够经过空参数,选择性的解析数组的值;
list($a,,$b)=[1,2,3];-->$a=1;$b=3;
each():用于返回数组当前指针所在位的键值对!并将指针后移一位;
返回值:若是指针有下一位,返回一个数组。包含一个索引数组(0-键,1-值)和一个关联数组("key"-键,"value"-值);
若是指针没有下一位,返回false。
四、使用list()/each()/while()配合遍历数组※※※
1 while(list($key,$value) = each($arr)){ 2 echo "{$key}-->{$value}<br>"; 3 } 4 reset($arr);
!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位,即再用each(),始终返回false;
若是还需使用,需用reset($arr);函数,重置数组指针。
$arr = [1,2,3,4];
list($a,$b,$c,$d) = $arr;
echo "a-->{$a}<br/>";
echo "b-->{$b}<br/>";
echo "c-->{$c}<br/>";
echo "d-->{$d}<br/>";
while($a = each($arr))
①each($arr)返回数组或false;
②把数组或false赋值给$a;
③while判断$a若是是数组,继续执行下一位;
若是$a是false,终止循环。
1 while($a = each($arr)){ 2 echo "{$a[0]}-->{$a[1]}<br>"; 3 echo "{$a['key']}-->{$a['value']}<br>"; 4 } 5 6 while(true){ 7 $a = each($arr); 8 if($a){ 9 echo "{$a[0]}-->{$a[1]}<br>"; 10 echo "{$a['key']}-->{$a['value']}<br>"; 11 }else{ 12 break; 13 } 14 } 15 16 while(list($key,$value) = each($arr)){ 17 echo "{$key}-->{$value}<br>"; 18 } 19 reset($arr);
五、使用数组指针遍历数组
①next:将数组指针,后移一位,并返回后一位的值,没有返回false
②prev:将数组指针,前移一位,并返回前一位的值,没有返回false
③end:将数组指针,移至最后一位,返回最后一位的值,空数组返回false
④reset:将数组指针,恢复到第一位,并返回第一位的值,空数组返回false
⑤key:返回当前指针所在位的键;
⑥current:返回当前指针所在位的键;
1 $arr = [1,2,3,4,"one"=>5]; 2 while(true){ 3 echo key($arr); 4 echo "--"; 5 echo current($arr); 6 echo "<br>"; 7 if(!next($arr)){ 8 break; 9 } 10 } 11 reset($arr); 12 do{ 13 echo key($arr); 14 echo "--"; 15 echo current($arr); 16 echo "<br>"; 17 }while(next($arr)); 18 reset($arr);
3、超全局数组 |
超全局数组,超全局变量,预约义数组,预约义变量——说的都是它。
PHP给咱们提供了一组包含强大功能的超全局数组,能够在任何地方,任何做用域不需声明,直接使用!不受任何做用域限制。
一、服务器变量: $_SERVER
二、环境变量:$_ENV
三、HTTP GET变量:$_GET
四、HHTP POST变量:$_POST
五、request变量:$_REQUEST
六、HTTP文件上传变量:$_FILES
七、HTTP Cookies:$_COOKIE
八、Session变量:$_SESSION
九、Global变量:$GLOBALS
一、服务器变量: $_SERVER
var_dump($_SERVER);
echo ($_SERVER{'HTTP_USER_AGENT'});
二、环境变量:$_ENV
将系统环境变量,转变为PHP中的数组,就是$_ENV;
PHP默认是关闭此全局数组的。若是须要使用,
需修改php.ini文件中的variables_order = "GPSC",
改成variables_order = "EGPSC";
可是,修改后会有系统性能损失,港方并不推荐使用。
可使用getenv()函数取代全局变量,取出每一个系统环境变量的值。
phpinof();函数,包含了有关PHP的各类信息,其实environment板块就是系统环境的变量,可使用getevn()函数取出其中的值;
三、HTTP GET变量:$_GET
获取前台经过get方式提交的数据
1 if(isset($_GET["sybmit"]&&isset($_GET["pwd"]))){ 2 if($_GET["username"]=="111"&&$_GET["pwd"]=="111"){ 3 echo "Get登陆成功!"; 4 }else{ 5 echo "Get登陆失败!"; 6 } 7 }
四、HHTP POST变量:$_POST
获取前台经过post方式提交的数据
1 if(isset($_POST["sybmit"])){ 2 if($_POST["username"]=="111"&&$_POST["pwd"]=="111"){ 3 echo "POST登陆成功!"; 4 }else{ 5 echo "POST登陆失败!"; 6 } 7 }
五、request变量:$_REQUEST
包含了$_GET,$_POST和$_COOKIE的数组
因为request同时包含get和post,可能致使get与post的键冲突,而且频率也不高。因此,并不使用request。
var_dump($_REQUEST);
六、HTTP文件上传变量:$_FILES
经过HTTP POST方式上传到当前脚本的项目的数组。
var_dump($_FILES);
七、HTTP Cookies:$_COOKIE
取到页面中的Cookie信息
1 setcookie("cookie","haha");
2 $_COOKIE["hehe"] = "hehe";
3 var_dump($_COOKIE);
八、Session变量:$_SESSION
取到保存在Session中的信息。
session_start();
$_SESSION["haha"] = "haha";
var_dump($_SESSION);*/
九、Global变量:$GLOBALS
$GLOBALS包含了上述8个全局数组,能够经过$GLOBALS["_SERVER"]取到$_SERVER
还能够经过给$GLOBALS数组追加下标。建立全局变量,能够在函数里函数外随意访问:$GLOBALS["name"] = "zhangsan";
var_dump($GLOBALS["_SERVER"]);
4、数组功能 |
一、返回数组全部的值,返回数组
var_dump(array_values($arr));
二、返回数组全部的键,返回数组
var_dump(array_keys($arr));
三、检测数组中是否包含某个值。返回真、假
参数:须要查询的值,数组,true(===)/false(===) 默认
var_dump(in_array("8",$arr,true));
四、交换数组中的键和值,返回新数组
var_dump(array_flip("8",$arr));
五、反转数组,返回新数组
参数:须要反转的数组
true:保留原有索引数组的下标与值的匹配。
false:只反转值,键不反转,默认
不管true/false,都不会影响关联数组,关联数组键,值永远是一对。
var_dump(array_reverse($arr,true));
六、统计数组元素个数
count($arr);
七、统计数组中,全部值出现的次数,返回一个新数组
新数组格式:键-->原数组的值(去重后的值)
值-->原数组对应的值出现的次数。
var_dump(array_count_values($arr));
八、移出数组中重复的值!
var_dump(array_unique($arr));
九、过滤数组中的每个值:
①不传回调函数:过滤掉全部空值(0/""/null/false/"0"/[])
②传回调函数:须要给回调函数传递一个参数,判断参数是否符合要求,若是符合,return true;不然,return false。
1 var_dump(array_filter($arr,function($num){ 2 if($num>4){ 3 return true; 4 }else{ 5 return false; 6 } 7 }));
经过回调函数,对数组的每个值,进行处理操做。(直接修改原数组,并返回bool类型的是否成功)
执行时,会给回调函数传递两个参数,分别是数组的value,key,而后能够在毁掉函数中,对值和键进行处理。
可是,牵扯到修改值的时候,必需要传递地址&!!!!
$fruits = array("d" => "lemon","a" => "orange","b" => "banana","c" => "apple");
1 var_dump(array_walk($fruits,function(&$item,$key){ 2 echo "{$key}-->{$item}<br>"; 3 $item .= $key; 4 })); 5 var_dump($fruits);
将数组的每一个值交由回调函数进行映射处理
array_map():第一个参数,是一个回调函数。第二个参数起,是>=1个数组。
有几个数组,能够给回调函数传几个参数,,表示每一个数组的一个value;
能够对value进行处理,处理完之后经过return返回,那么新数组的对应的值就是你return回去的值。
【array_map与array_walk的异同】
相同点:都能遍历数组,经过回调函数,从新处理数组的每个值;
不一样点:
①walk只能传一个数组,回调函数接收这个数组的值和键;
map能够传多个数组,回调函数接收每一个数组的值;
②walk直接修改原数组,而map不修改原数组,将新数组返回;
③walk给回调函数传递一个其他参数,map只能传数组的值;
④处理方式上,walk若是须要改掉原数组的值,需在回调函数中传递地址,直接修改变量的值;
而map,是经过将新的值,用return返回,便可修改新数组的值。
$a = [1,2,3,4,5];
$b = [1,2,3,4,5];
1 var_dump(array_walk($fruits,function(&$item,$key){ 2 echo "{$key}-->{$item}<br>"; 3 $item .= $key; 4 })); 5 var_dump($fruits);
5、数组函数 |
sort -- 对数组排序(升序)
var_dump(sort($arr));
rsort--对数组逆向排序(降序)
usort--使用用户自定义的比较函数对数组中的值进行排序
asort--对数组进行排序并保持索引关系(关联数组排序)
arsort--对数组进行逆向排序并保持索引关系
uasort--用户自定义的比较函数对数组进行排序并保持索引关联
ksort--对数组按照键名排序
krsort--对数组按照键名逆向排序
uksort--使用用户自定义的比较函数对数组中的键名进行排序
natsort--用“天然排序”算法对数组排序
natcasesort--用“天然排序”算法对数组不区分大小写字母排序
array_multisort -- 对多个数组或多维数组进行排序
第一个参数:第一个数组,必选
第二个参数:SORT_DESC;SORT_ASC(升序降序);
第三个参数:SORT_STRING/SORT_NUMERIC(按照字符串仍是数字排序)
再以后是多个数组
排序规则:先排第一个数组,后面的数组会根据和第一个数组的对应关系,一列一列的排序;
若是多个数组多个数组排序,排序的数组长度要相等,不然报警告;
array_slice($array, $offset)
第一个参数:数组,必须;
第二个参数:从第几位开始截,负数表示从右往左数(按照数组的顺序ps:包括关联数组,而非下标)
第三个参数:截取的长度,可选,默认截取到最后
第四个参数:bool类型的参数,默认为false,索引从新排序,true保持索引关联
$arr1 = array_slice($arr, 2,5,TRUE);
array_splice($offset)
返回值:数组(被删掉的部分)
参数:
一、数组的地址,会修改原数组
二、从第几位开始删
三、删除的长度,不填默认到结尾
四、不填,默认为删除,填,用填的部分替换删掉的部分;
$arr1 = array_splice($arr, 2,5,[1,2,3,4]);
array_combine($keys, $values);建立一个数组,用一个数组的值做为键名,另外一个数组的值做为值;
array_combine($keys'做为键的数组', $values'做为值的数组');
两个数组的长度必须一致,不然报警告
array_merge($array1);合并一个或多个数组
合并多个数组,将后面的数组拼接在前面数组的后面
若是多个数组中存在多个同名的关联键,则后面的会覆盖前面的
array_intersect($array1, $array2);两个数组取交集
多个数组取交集,结果会保留第一个数组的键值关联匹配
array_diff($array1, $array2);多个数组取差集;
取出多个数组中,在第一个数组中包含,可是在其余数组中不包含的值,保留第一个数组的键值关联;
array_pop();
删除数组最后一个值;返回删除的值;
array_push($var);
数组的最后插入一个或多个值;返回处理以后元素的个数
array_shift();
删除数组第一个值;返回删除的值;
array_unshift($var);
数组的开头插入一个或多个值;返回处理以后元素的个数
array_rand($input);随机抽取数组中的一个到多个键名!第二个参数为空,表示抽一个,传入数字n表示抽n个
shuffle();将函数打乱从新排序
好啦~~~今天的内容先分享到这里,小女子小菜鸟一只,还请各位园友多多指教·喜欢就点个赞吧~感谢支持!