PHP从入门到精通(三)
PHP数组的分类 |
按照下标的不同,PHP数组分为关联数组与索引数组:
索引数组:下标从0开始,依次增长;
关联数组: 下标为字符串格式,每个下标字符串与数组的值一一关联对应。(有点像对象的键值对)
关于关联数组和索引数组:
1、数组中,可以同时存在索引数组与关联数组;
array(1,2,3,"one"=>4);
2、数组中,所有的索引数组,如果不加指定,会去掉关联项,默认增长(即,关联数组不占索引位);
array(1,2,"one"=>3,4,5); //1,2,4,5的索引-->0/1/2/3
3、如果,关联数组的key,是纯十进制整数字符串,则会将此数字转为索引数组的索引值;("10.0"/"08"等格式,仍然是关联数组,不转为索引)
array(1,2,"one"=>3,"9"=>4,"010"=>5);// 1,2,4的索引-->0/1/9
4、 手动指定关联数组的key、索引数组的下标,如果与前面已有的key或下标重复,则后制定的值会覆盖之前的值;
array(1,"one"=>2,0=>5,"one"=>6); --> 打印数组:0=>5,"one"=>6
5、如果手动指定索引数组下标,则后续自增长下标 ,会按照之前下标最大值,依次增长;
array(1,2,7=>3,4);--> 1,2,3,4的下标-->0/1/7/8
实例展示:
$arr1 = array(1,2,3,4,5,6,7); // 索引数组
var_dump($arr1); $arr2 = array("one"=>1,"two"=>2,"three"=>3); // 关联数组
var_dump($arr2); $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"haha"=>9);
var_dump($arr3);
数组的声明方式 |
1、直接赋值声明:
$arr[] = 1;
$arr[] = 1;
$arr[8] = 1;
$arr[] = 1;
$arr[4] = 1;
$arr[] = 1;
var_dump($arr);
2、[]字面量声明(PHP5.4版本之后能用)
$arr = [1,2,3,4,"one"=>54,6];
var_dump($arr);
3、 Array()声明 木有new关键字
$arr = array(1,2,3,4,5);
var_dump($arr);
数组元素的读取 |
PHP中,数组支持[]和{}读取下标。
$arr = [1,2,3,"one"=>4];
echo $arr[0];
echo $arr["one"];
echo $arr{"one"};
echo $arr{0};
多维数组 |
数组的一个值,依然是一个数组,我们称这种数组为多维数组;
多维数组,不要求所有的项都是数组,可以是数组与普通值的混合;
多维数组,也不要求每个子数组的个数限制,可以是任意的长度;
使用多维数组一定要注意,数组中分隔用逗号!!
原则上,多维数组一般不超过3层使用。
实例展示:
$h51701 = array(
"group1"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14),
array("name"=>"张三"),
"groupName"=>"一组"
),
"group2"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男")
),
"group3"=>array(
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男"),
array("name"=>"张三","age"=>14,"sex"=>"男")
)
);
var_dump($h51701);
数组的遍历 |
1、使用for循环遍历数组
conut($arr);用于统计数组元素的个数。
for循环只能用于遍历,纯索引数组!!!!
如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!!
$arr = array(1,2,3,5,6,7);
$num = count($arr);//count最好放到for外面,可以让函数只执行一次
echo "数组元素的个数{$num}<br/>";
for($i=0;$i<$num;$i++){
echo "{$i}==>{$arr[$i]}<br/>";
}
2、forEach循环遍历数组
foreach可以遍历任何类型的数组!!!
写法如下:
$arr = array(1,2,3,"one"=>4,5,6,7);
foreach($arr as $item){
echo "{$item}<br>";
}
foreach($arr as $key => $item){
echo "{$key}==>{$item}<br>";
}
3、使用list()、each()、while()遍历数组
list():用于将数组的每一个值,赋值给list函数的每一个参数。(list函数的参数,必须小于等于数组的元素个数);
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()配合遍历数组:
while(list($key,$value) = each($arr)){
echo "{$key}-->{$value}<br>";
}
reset($arr);
!!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位;即再用each(),始终返回false;
如果还需使用,需用reset($arr);函数,重置数组指针;
4、 使用数组指针遍历数组
① next:将数组指针,后移一位。并返回后一位的值;没有返回false
② prev:将数组指针,前移一位。并返回前一位的值;没有返回false
③ end: 将数组指针,移至最后一位,返回最后一位的值;空数组返回false
④ reset:将数组指针,恢复到第一位。并返回第一位的值;空数组返回false
⑤ key: 返回当前指针所在位的键;超出返回null。
⑥ current:返回当前指针所在位的值;超出返回false。
$arr = [1,2,3,""=>false,"one"=>5];
while(true){
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
//key===null用于排除数组包含空值,导致next返回值为false的情况;
if(!next($arr)&&key($arr)===null){
break;
}
}
reset($arr);
do{
echo key($arr);
echo "--";
echo current($arr);
echo "<br>";
}while(next($arr));
reset($arr);
超全局数组 |
超全局数组、超全局变量、预定义数组、预定义变量说的都是他。
PHP给我IM恩提供了一组包含强大功能的超全局数组,可以在任何地方、任何作用域不需要声明,直接使用!!不受任何作用域限制。
1、 服务器变量: $_SERVER;
$_SERVER返回包含浏览器头信息、路径、脚本以及服务器系统等各种信息;
如图所示:
2、 环境变量:$_ENV;
$_ENV将系统环境变量,转变为PHP中的数组,就是$_ENV;
PHP默认是关闭此全局数组的。如果需要使用,需修改php.ini文件中的variables_order="GPSC",改为variables_order="EGPSC"即可使用,否则为空;
但是,修改后会造成系统性能损失,官方并不推荐使用。
可以使用getenv()函数取代全局变量,取出每个系统环境变量的值。
phpinfo():函数,包含PHP的各种信息,其中environment模块就是系统环境变量,可以使用getevn()取出其中的每一个值;
3、 HTTP GET变量:$_GET;
$_GET获取前台通过get方式提交的数据;
4、 HHTP POST变量:$_POST;
$_POST获取前台通过post方式提交的数据;
5、 request变量:$_REQUEST;
默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。
由于$_REQUEST同时包含get和post,可能导致get和post的键冲突,并且效率也不高,所有,并不使用request。
6、 HTTP文件上传变量:$_FILES;
通过 HTTP POST 方式上传到当前脚本的项目的数组。 (后续细讲)
7、 HTTP Cookies:$_COOKIE;
获取当前页面cookie信息;(可以手动setcookie("",""),可赋值);
8、 Session变量:$_SESSION;
$_SESSION:取到保存在session中的信息。
!!!!!!$_SESSION很常用,非常重要!!!!!!!!
9、 Global变量:$GLOBALS;
$GLOBALS包含了上述所有全局数组,可以通过$GLOBALS["$_SERVER"]取到$_SERVER;
还可以通过给$GLOBALS数组追加下标,创建全局变量,可以在函数里函数外随意访问:$GLOBALS["name"]="zhangsan";
实例展示:
//1、服务器变量:$_SERVER;
//var_dump($_SERVER);
//var_dump($_SERVER['HTTP_USER_AGENT']);
//var_dump($_ENV);
//phpinfo();
//var_dump($_GET);
if(isset($_GET["submit"])){
if($_GET["username"]==$_GET["pwd"]){echo "GET登陆成功";}
else{echo "GET登陆失败";}
}
if(isset($_POST["submit"])){
if($_POST["username"]==$_POST["pwd"]){echo "POST登陆成功";}
else{echo "POST登陆失败";}
}
//var_dump($_REQUEST);
//var_dump($_COOKIE);
//session_start();
//$_SESSION["haha"]="hehe";
//var_dump($_SESSION);
//var_dump($GLOBALS["$_SERVER"]);
var_dump($http_response_header);
?>
<form action="" method="post" autocomplete="on">
用户名:
<input type="text" name="username" /><br />
密 码:
<input type="password" name="pwd"/><br />
<input type="submit" name="submit" value="登录" />
</form>
PHP从入门到精通(三)的更多相关文章
- iOS开发-UI 从入门到精通(三)
iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...
- MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...
- visual studio 2015 搭建python开发环境,python入门到精通[三]
在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- MyBatis 入门到精通(三) 高级结果映射
MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常 ...
- Atom编辑器入门到精通(三) 文本编辑基础
身为编辑器,文本编辑的功能自然是放在第一位的,此节将总结常用的文本编辑的方法和技巧,掌握这些技巧以后可以极大地提高文本编辑的效率 注意此节中用到的快捷键是Mac下的,如果你用的系统是Win或者Linu ...
- flutter从入门到精通三
flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...
- SaltStack 入门到精通第三篇:Salt-Minion配置文件详解
SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ 发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 ...
- GPU 编程入门到精通(三)之 第一个 GPU 程序
博主因为工作其中的须要.開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...
随机推荐
- HDU ACM 1224 Free DIY Tour (SPFA)
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 第七章 鼠标(CONNECT)
/* CONNECT.C -- Connect-the-Dots Mouse Demo Program (c) Charles Petzold,1998 */ #include <Windows ...
- Paramiko和堡垒机实现
一.Paramiko paramiko模块,基于SSH用于连接远程服务器并执行相关操作. 1.安装:pip install paramiko 2.SSHClient:用于连接远程服务器并执行基本命令 ...
- nginx+uwsgi+djangos部署项目完整
1.基本信息 Linux 版本:SentOS7.4 Python 版本:3.7.1 2.下载 uWSGI pip3 install uwsgi uwsgi 主要的任务是座位分发路由的服务器. 先写一个 ...
- Find a way
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...
- Spring Cloud Eureka 属性作用
配置参数 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean eu ...
- nginx服务器常见错误代码500、501、502、503、504、505
一:500错误 1.500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求. 2.500出错的可能性: a.编程语言语法错误,we ...
- (四) 天猫精灵接入Home Assistant-ESP-WIFI模块通过mqtt协议接入HASS
总过程 1 ESP8266上电后,初始化 连接MQTT服务器 发布自身配置信息----hass自动发现该设备 订阅hass的命令话题---接收命令 发布hass的状态话题---返回自身状态 2 ESP ...
- oracle 11.2.0.4 dbca创建数据库时 报错ORA-12532
ORA-12532:TNS:无效参数 在实例安装到50%的时候ORA-12532的错误. 原因: sys密码中包含‘@’字符引起的.重新设置,通过.
- Linux系统学习之文件管理
Linux目录分布通常是树形,所以它的结构又称为目录树. 一.文件和目录管理 [root@Cfhost-170820-UCNK /]# cd / [root@Cfhost-170820-UCNK /] ...