PHP从入门到精通_php从入门到精通第6版pdf 百度网盘
wptr33 2025-09-09 13:36 4 浏览
本文章为连载文章PHP入门的第二篇
建议先阅读前篇文章:PHP从基础到入门(三)
数组
数组基础
含义:
数组就是一系列数据的集合体,他们按设定的顺序排列为一个“链的形状”。
注意:php中的数组单元的顺序,跟下标无关!
数组定义(赋值):
$arr1 = array(3, 11, 5, 18, 2 );//这是最常见的数组,下标为“默认下标”,就是从0开始的整数;
$arr2 = array(“a”=>3, “bb”=>11, “cc123”=>5, ‘d1’=>18, ‘xyz’=>2 );关联数组,下标为字符串,常见
$arr3 = array(1=>3, 10=>11, 3=>5, 0=>18, 88=>2 );下标可以人为给定;
$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );下标可以数字和字符串混合使用;
$arr5 = array(5=>3, 11, 3=>5, ‘mn’=>18, 2 ); //有指定下标,也有“自动下标”,
//此时下标为:5,6,3,”mn”, 7
//可见,自动下标为“前面最大数字下标+1”
$arr6 = array(5=>3, 7.7=>11, 3=>5, ‘mn’=>18, 2 ); //此时下标为:5,7,3,”mn”, 8
$arr7 = array(5=>3, true=>11, false=>5, ‘mn’=>18, 2 ); //此时下标为:5,1,0,”mn”, 6
$arr8 = array(1=>3, 3=>33, true=>11, ); //此时下标为:1,3,其对应值为:11, 33
//下标如果有重复,后面的值覆盖前面的值;
$arr9 = array(1=>3, -3=>33, 11, ); //此时下标为:1, -3, 2,注意:最后一个逗号“可以有”。
其他一些形式:
$arr10[] = 3;
$arr10[] = 11;
$arr10[] = 5; //该数组下标为0,1,2,常规情况
$arr11[‘a’] = 3;
$arr11[‘bb’] = 11;
$arr11[‘cc123’] = 5; //该数组下标为’a’,’bb’,’cc123’,常规情况
$arr12[1] = 3;
$arr12[] = 11; //此时下标为2
$arr13[‘cc123’] = 5; //该数组下标为1,2,’cc123’
特别注意:php中,数组单元的顺序,是由其“放入”顺序决定,而不是下标。
数组取值:
$v1 = $arr1[0];
$i = 3;
$v2 = $arr1[$i]; //取得数组下标为3的单元的值;
总体上,可以将取得一个数组的单元的值,看组取得一个变量的值完全一样!!!
数组的分类
按键值关系来分:
索引数组:通常认为,如果一个数组的下标是严格按照从0开始的连续的整数作为下标,则称其为索引数组——就是类似js数组的下标。例如:
$arr1 = array(3, 11, 5, 18, 2 );//这是最常见的数组,下标为“默认下标”,就是从0开始的整数;
关联数组:通常认为,如果一个数组的下标都是一个“字符串”并一定程度上表名了该单元的“含义”,则称为关联数组,例如:
$conf = array(
‘host’=>”localhost” ,
‘port’=>3306 ,
‘username’=>’root’ ,
‘password’ => ‘123’ ,
);
混合数组:既有数字下标,也有字符下标的情况:
$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );下标可以数字和字符串混合使用;
按数组的维数(复杂程度)分:
一维数组:
$a = array(1, 11, 111);
$b = array(2, 22, 222);
$c = array(3, 33, 333);
二维数组:
$dd = array(
array(1, 11, 111),
array(2, 22, 222),
array(3, 33, 333)
);
多维数组:无非就是继续里面再用数组代替。
数组的基本使用
求一个一维数组的平均值:
求一个二维数组的平均值:
求一个一维数组的最大值:
求交换一个一维数组的最大值和最小值的位置:
有关数组的交换,再说两句:
$a = array( 3, 11, 5, 7, 20, 18); //下标是0,1,2,3,4,5
需求1:交换数组第0项和第3项:
$v1 = $a[0];
$v2 = $a[3];
$t = $v1;
$v1 = $v2;
$v2 = $t;//这种做法根本不行,因为v1,v2只是2个变量,跟数组没有关系了!
正确的做法是:
$t = $a[0];
$a[0] = $a[3];
$a[3] = $t;
需求2:交换数组首项和末项:
$pos1 = 0; //首项的下标
$pos2 = count($a) - 1; //最后一项的下标
$t = $a[$pos1];
$a[$pos1] = $a[$pos2];
$a[$pos2] = $t;
需求3:交换数组最大项和最小项:
$pos_max = ....; //经过一番计算得到最大项的下标;
$pos_min = ....; //经过一番计算得到最小项的下标
$t = $a[$pos_max];
$a[$pos_max] = $a[$pos_min];
$a[$pos_min] = $t;
数组的遍历
foreach基本语法
foreach( $数组变量名 as 【$key =>】 $value ){
//循环体;这里可以去“使用”$key 和 value;
//$key 和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。
//而且,它总是从数组的开头往后按顺序取数据。
}
数组的指针操作及遍历原理:
首先,看看数组的一个“形象图”:
$arr4 = array(1=>3, ‘a1’=>11, 3=>5, ‘mn’=>18, 88=>2 );
可以将其以视觉化的方式理解为:
数组下标: | 1 | “a1” | 3 | “mn” | 88 |
对应数据: | 8 | 11 | 5 | 18 | 2 |
其中,该箭头,就是数组内部的所谓“指针”——注意,不可见,不可输出,只是一种辅助理解的图形!
说明:
1,该箭头,就是数组内部的所谓“指针”
2,默认情况下,该指针指向数组的第一个单元。
3,数组的有关单元的操作,如果没有指定下标,则就是针对该指针指向的单元的操作。
4,所谓遍历,其实就是一次次取得当前单元的键和值,并放入对应的变量$key, $value,然后移动指针到下一个单元。
则,数组,作为一个“总体数据单位”,有如下指针操作函数可以使用:
1,$v1 = current($数组); //获得数组的当做指针所在单元的“值”;
2,$v2 = key($数组); //获得数组的当做指针所在单元的“键”(下标);
3,$v3 = next($数组); //先将数组的指针移向下(后)一个单元,然后取得该新单元的值;
4,$v4 = prev($数组); //先将数组的指针移向上(前)一个单元,然后取得该新单元的值;
5,$v5 = end($数组); //先将数组的指针直接移向最后一个单元,然后取得该新单元的值;
6,$v6 = reset($数组); //先将数组的指针直接移向第一个单元,然后取得该新单元的值;
foreache遍历流程原理图:
foreach( $数组变量名 as $key => $value ){
//循环体;这里可以去“使用”$key 和 value;
//$key 和 $value 就是该遍历语句一次次取得的数组的每一个单元(项)的下标和对应值。
//而且,它总是从数组的开头往后按顺序取数据。
}
其基本原理示意图如下:
输出结果为:
可见:遍历之后,指针已经超出数组合理位置了。
使用for和next遍历数组
注意:对php数组,往往不能单纯使用for循环进行遍历。
或者说:php中,使用for循环只能循环“下标为连续的纯整数数组”;
结果:
each()函数的使用
each()函数的作用:先取得一个数组的“当前单元”的下标和值(并放入一个数组),然后将指针移到下一个单元。
使用形式:
$a = each($数组名); //此时$a就是一个数组了
list()“函数”的使用:
list()函数用于一次性取得一个数组中从0开始的数字下标的多个单元的值!
形式:
list($变量1,$变量2,$变量3, .. ) = $数组;
作用:
上述一行代码相当于如下代码:
$变量1 = $数组[0];
$变量2 = $数组[1];
$变量3 = $数组[2];
........
注意:这里变量的个数,要跟该数组的数字下标的单元对应,如果某个变量对应的该数字下标不存在,就会报错!
while+each()+list()遍历数组
数组变量的一些细节
foreach也是正常的循环语法结构,可以有break和continue等操作。
遍历过程中值变量默认的传值方式是值传递。
结果为:
遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... }
结果为:
foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环(原数组保持不变)。
以下演示的是“foreach默认是原数组上进行遍历”的效果:
然后,再演示:在某些情况下(修改或指针操作),不是在原数组身上进行遍历。
结果为:
foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。
相关推荐
- 第 28 章:核心功能 SQL 查询 - PostgreSQL入门
-
欢迎来到我们史诗级教程的最终章!在上一章,我们成功地构建了博客系统的数据库骨架。现在,这个结构精良的数据库正静静地等待着我们去使用它。...
- postgresql的6种索引介绍_postgresql默认用户名和密码
-
postgresql几种索引PostgreSQL支持多种索引类型,每种索引的设计原理、适用场景和优缺点各有不同。以下是对主要索引类型的详细介绍:...
- 第 20 章:索引与性能优化 - PostgreSQL入门
-
到目前为止,我们已经学习了如何设计表、保证数据完整性、以及如何用各种方式查询数据。但当我们的表从几十行增长到几百万、甚至上亿行时,一个之前只需要0.1秒的查询,可能会变成需要几分钟甚至几小时的“灾...
- PostgreSQL 主从复制 完整指南_主从复制mysql
-
PostgreSQL主从复制(StreamingReplication)完整指南PostgreSQL主从复制是一种实时同步数据的机制,可以实现高可用性(HA)、读写分离和负载均衡。其...
- PostgreSQL监控神器,千万注意这5大关键指标!
-
PostgreSQL监控神器,千万注意这5大关键指标!在当今数据驱动的业务环境中,数据库的性能和稳定性直接关系到企业的运营效率与用户体验。PostgreSQL作为一款功能强大的开源关系型数据库,被广泛...
- Retool 如何升级主应用 4TB 的 PostgreSQL 数据库
-
本文最初发布于Retool官方博客。...
- PostgreSQL查询计划_postgresql查询计划中的cost组成
-
深入解析PostgreSQL查询计划:优化性能的关键在数据库管理系统中,查询计划是执行SQL查询时的关键组成部分。PostgreSQL作为一款功能强大的开源关系型数据库,其查询计划的生成与优化对于提升...
- 第 27 章:数据库与表结构实现 - PostgreSQL入门
-
在上一章,我们已经绘制好了博客系统的宏伟蓝图。现在,是时候戴上安全帽,化身“建筑工程师”,将图纸上的设计一砖一瓦地搭建成真实的数据库结构了。...
- PostgreSQL事务处理_postgresql时区问题
-
PostgreSQL事务处理:原理、应用与优化引言...
- 第 14 章:集合运算 (UNION, INTERSECT, EXCEPT) - PostgreSQL入门
-
在之前的章节里,我们所有的操作(JOIN...
- PostgreSQL 安装指南及日常使用_postgresql 11安装
-
PostgreSQL安装与日常使用PostgreSQL是一款功能强大、开源的对象关系型数据库,支持高级SQL标准、扩展功能、事务完整性和高并发。本指南涵盖安装、配置、日常使用、性能优化、常见...
- 第 23 章:函数与存储过程 (PL/pgSQL) - PostgreSQL入门
-
到目前为止,我们与数据库的交互方式都是从外部客户端(如psql...
- PostgreSQL是不是你的下一个JSON数据库?
-
根据Betteridge定律(任何头条的设问句可以用一个词来回答:不是),除非你的JSON数据很少修改,并且查询很多。最新版的PostgreSQL添加更多对JSON的支持,我们曾经问过PostgreS...
- "揭秘PostgreSQL:你必须掌握的数据类型全解析!"
-
揭秘PostgreSQL:你必须掌握的数据类型全解析!在数据库管理系统中,PostgreSQL以其强大的功能和稳定性而著称。为了充分发挥其性能,理解并熟练掌握其数据类型是至关重要的。本文将深入探讨Po...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
-
- 第 28 章:核心功能 SQL 查询 - PostgreSQL入门
- postgresql的6种索引介绍_postgresql默认用户名和密码
- 第 20 章:索引与性能优化 - PostgreSQL入门
- PostgreSQL 主从复制 完整指南_主从复制mysql
- PostgreSQL监控神器,千万注意这5大关键指标!
- Retool 如何升级主应用 4TB 的 PostgreSQL 数据库
- PostgreSQL查询计划_postgresql查询计划中的cost组成
- 第 27 章:数据库与表结构实现 - PostgreSQL入门
- 谁帮我看看,为啥我的PostgreSQL查询速度这么慢???
- PostgreSQL事务处理_postgresql时区问题
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)