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 />
密&nbsp;码:
<input type="password" name="pwd"/><br />
<input type="submit" name="submit" value="登录" />
</form>

PHP从入门到精通(三)的更多相关文章

  1. iOS开发-UI 从入门到精通(三)

    iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...

  2. MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...

  3. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  4. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  5. MyBatis 入门到精通(三) 高级结果映射

    MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的.虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是.如果有一个数据库能够完美映射到所有应用程序,也将是非常 ...

  6. Atom编辑器入门到精通(三) 文本编辑基础

    身为编辑器,文本编辑的功能自然是放在第一位的,此节将总结常用的文本编辑的方法和技巧,掌握这些技巧以后可以极大地提高文本编辑的效率 注意此节中用到的快捷键是Mac下的,如果你用的系统是Win或者Linu ...

  7. flutter从入门到精通三

    flutter可以通过一套代码运行在多个平台上,包括移动,web,桌面,嵌入式,但是在 Web 平台的支持尚未达到 Beta 阶段,请不要用在生产环节,在阅读文档时候,推荐大家阅读https://fl ...

  8. SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

    SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16   ##### 主要配置设置 ##### 配置 默认值 ...

  9. GPU 编程入门到精通(三)之 第一个 GPU 程序

    博主因为工作其中的须要.開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

随机推荐

  1. 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 ...

  2. 第七章 鼠标(CONNECT)

    /* CONNECT.C -- Connect-the-Dots Mouse Demo Program (c) Charles Petzold,1998 */ #include <Windows ...

  3. Paramiko和堡垒机实现

    一.Paramiko paramiko模块,基于SSH用于连接远程服务器并执行相关操作. 1.安装:pip install paramiko 2.SSHClient:用于连接远程服务器并执行基本命令 ...

  4. nginx+uwsgi+djangos部署项目完整

    1.基本信息 Linux 版本:SentOS7.4 Python 版本:3.7.1 2.下载 uWSGI pip3 install uwsgi uwsgi 主要的任务是座位分发路由的服务器. 先写一个 ...

  5. Find a way

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  6. Spring Cloud Eureka 属性作用

    配置参数 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean eu ...

  7. nginx服务器常见错误代码500、501、502、503、504、505

    一:500错误 1.500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求. 2.500出错的可能性: a.编程语言语法错误,we ...

  8. (四) 天猫精灵接入Home Assistant-ESP-WIFI模块通过mqtt协议接入HASS

    总过程 1 ESP8266上电后,初始化 连接MQTT服务器 发布自身配置信息----hass自动发现该设备 订阅hass的命令话题---接收命令 发布hass的状态话题---返回自身状态 2 ESP ...

  9. oracle 11.2.0.4 dbca创建数据库时 报错ORA-12532

    ORA-12532:TNS:无效参数 在实例安装到50%的时候ORA-12532的错误. 原因: sys密码中包含‘@’字符引起的.重新设置,通过.

  10. Linux系统学习之文件管理

    Linux目录分布通常是树形,所以它的结构又称为目录树. 一.文件和目录管理 [root@Cfhost-170820-UCNK /]# cd / [root@Cfhost-170820-UCNK /] ...