《细说PHP》第6章PHP中的数组和数据结构.ppt

上传人:小飞机 文档编号:6528698 上传时间:2023-11-09 格式:PPT 页数:55 大小:631KB
返回 下载 相关 举报
《细说PHP》第6章PHP中的数组和数据结构.ppt_第1页
第1页 / 共55页
《细说PHP》第6章PHP中的数组和数据结构.ppt_第2页
第2页 / 共55页
《细说PHP》第6章PHP中的数组和数据结构.ppt_第3页
第3页 / 共55页
《细说PHP》第6章PHP中的数组和数据结构.ppt_第4页
第4页 / 共55页
《细说PHP》第6章PHP中的数组和数据结构.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《《细说PHP》第6章PHP中的数组和数据结构.ppt》由会员分享,可在线阅读,更多相关《《细说PHP》第6章PHP中的数组和数据结构.ppt(55页珍藏版)》请在三一办公上搜索。

1、第6章 PHP中的数组和数据结构,回顾,PHP中的函数都有哪些优越性?如何定义一个函数?PHP变量的范围?我们都有哪些自定义函数的形式?,预习检查,PHP中都有哪些数组?PHP中数组的定义方式?PHP数组的遍历都有哪些?,本章任务,1.数组的分类2.数组的定义3.数组的遍历4.预定义数组5.数组的相关处理函数6.操作PHP数组需要注意的一些细节,1 数组的分类,PHP 中的数组实际上是一个有序图。图是一种把 values 映射到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用

2、另一个 PHP 数组作为值,也可以很容易地模拟树。,所谓的数组下标可以视为资料内容在此数组中的识别名称,通常被称为数组下标。当索引值为数值时,也代表此资料内容在数组中的储存位置。数组中有几个索引值就被称为几维数组。数组分类:在PHP中有两种数组:索引数组和关联数组。索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据。,2 数组的定义,2.1 直接赋值的方式声明数组2.2 使用array()语言结构新建数组2.3 多维数组的声明,数组常用的赋值方式:由于 P

3、HP 是属于弱类型数据,因此源代码中的数组并不需要经过特别的声明操作,直接将一组数值指定给某一数组元素即可。一般情况下数组的赋值有两种方式:直接赋值方式 如:$a0=;$a1=;使用array函数 如:$a=array(“,”);,2.1 直接赋值的方式声明数组,直接赋值格式:$数组变量名索引值=资料内容其中索引值(下标)可以是一个字符串或一个整数。等价于整数(不以0开头)的字符串值被当作整数对待。因此,数组$array3与$array3是引用相同的元素。但是$array03引用的另外不同的元素。一维数组数组中索引值(下标)只有一个的数组称为一维数组。在数组中这是最简单的,也是最常用的了。,?

4、php$contact10=1;$contact11=高某;$contact12=A公司;$contact13=北京市;$contact14=(010)98765432;$contact15=;$contact2ID=2;$contact2姓名=峰某;$contact2公司=B公司;$contact2地址=上海市;$contact2电话=(021)12345678;$contact2EMAIL=;print_r($contact1);/输出数组$contact1中所有元素的下标和值 var_dump($contact1);/输出数组$contact1中所有元素的下标和值同时输出每个元素的类型

5、print_r($contact2);/输出数组$contact2中所有元素的下标和值 var_dump($contact2);/输出数组$contact2中所有元素的下标和值同时输出每个元素的类型,?php$contact=1/索引下标为 0$contact=高某;/索引下标为 1$contact=A公司;/索引下标为 2$contact=北京市;/索引下标为 3$contact0=1/声明数组使用的下标为整数0$contactID=1/声明数组使用的下标为字符串$contact1=高某;/使用下标为整数1向数组中添加元素$contact姓名=峰某;/使用下标为字符串“姓名”向数组中添加元素

6、$contact2=A公司;/使用下标为整数2向数组中添加元素$contact公司=A公司;/使用下标为字符串“公司”向数组中添加元素$contact=1;/默认的下标为 0$contact14=高某;/指定非连续的下标为 14$contact=A公司;/将紧跟最高的下标值增1后的下标为 15$contact=北京市;/下标再次增1为 16$contact14=(010)98765432;/前面已声明过下标为14的元素,重新为下标14元素赋值$contact=;/还会紧跟最高的下标值增1后的下标为 17,2.2 使用array()语言结构新建数组,格式:array(key=value,.)/k

7、ey 可以是 integer 或者 string/value 可以是任何值 key 可以是 integer 或者 string。如果键名是一个 integer 的标准表达方法,则被解释为整数(例如“8”将被解释为 8,而“08”将被解释为“08”)。key 中的浮点数被取整为 integer。PHP 中没有不同的数字下标和关联下标数组,数组的类型只有一种,它可以同时包含整型和字符串型的下标。如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。,实例:,aaa,1=bbb,2=ccc);$d=array(aaa,6=bbb,cc

8、c);$e=array(name=zhang,age=20);?,2.3 多维数组的声明,二维数组的声明多维数组的声明方式及规则,与一维数组相同,例如:下面二维数组的声明片段:这时数组中的资料内容如下:如果以 array 语法声明,则如下程序片段:,array(1,高某,A公司,北京市,(010)98765432,),上海联系人=array(2,洛某,B公司,上海市,(021)12345678,),天津联系人=array(3,峰某,C公司,天津市,(022)24680246,),重庆联系人=array(4,书某,D公司,重庆市,(023)13579135,);echo 第一个联系人的公司:.$

9、contact102.;/输出A公司 echo 上海联系人的EMAIL:.$contact2上海联系人5.;/输出,array(array(1,高某,市场部经理,5000.00),array(2,洛某,职员,3000.00),array(3,峰某,职员,2400.00),),产品部=array(array(1,李某,产品部经理,6000.00),array(2,周某,职员,4000.00),array(3,吴某,职员,3200.00),财务部=array(array(1,郑某,财务部经理,4500.00),array(2,王某,职员,2000.00),array(3,冯某,职员,1500.00

10、);print_r($wage市场部);/访问数组$wage中的第一个元素 print_r($wage市场部1);/访问数组$wage市场部中的第二个元素 print_r($wage市场部13);/访问数组$wage市场部1中的第四个元素,输出3000,3 数组的遍历,3.1 使用for语句循环遍历数组3.2 使用foreach语句遍历数组3.3 联合使用list()、each()和while循环遍历数组3.4 使用数组的内部指针控制函数遍历数组,3.1 使用for语句循环遍历数组,;echo 联系人列表;echo;/以html的th标记输出表格的字段名称 echo 编号姓名公司地址电话EMA

11、IL;echo;/使用for循环输出一维数组中的元素 for($i=0;$i.$contact$i.;/循环一次输出数组中的一个元素 echo;,3.2 使用foreach语句遍历数组,foreach循环结构:foreach 仅用于数组,有两种语法。foreach(array_expression as$value).statementforeach(array_expression as$key=$value).statement第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给$value 并且数组内部的指针向前移一步,第二种格式做同样的事,只除了

12、当前单元的键值也会在每次循环中被赋给变量$key。注:当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。此外注意foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。$v)echo$k=$v;?,array(array(1,高某,市场部经理,5000.00),array(2,洛某,职员,3000.00),array(3,峰某,职员,2400.00),产品部=array(array(1,李某,产品部经理,6000.00),array(2,周某,职员,4000.00),array(3,吴某,职员,3200.00),财务部=array(array(1,郑某,财务部经理,4

13、500.00),array(2,王某,职员,2000.00),array(3,冯某,职员,1500.00);/使用三层foreach语句嵌套遍历三维数组,输出三个表格 foreach($wage as$sector=$table)/最外层foreach语句遍历出三个表格,遍历出键和值 echo;echo.$sector.10月份工资表;echo 编号姓名职务工资;foreach($table as$row)/中层foreach语句遍历出每个表格中的行 echo;foreach($row as$col)/内层foreach语句遍历出每条记录中的列值 echo.$col.;echo;echo;,3

14、.3 联合使用list()、each()和while循环遍历数组,array each(array array)返回 array 数组中当前指针位置的键值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。如果内部指针越过了数组的末端,则 each()返回 FALSE。each()经常和list()结合使用来遍历数组。voidlist(mixed.)它不是真正的函数,而是语言结构。list()用一步操作给一组变量进行赋值。注:list()仅能用于数字索引的数组并假定数字索引从0开

15、始。在执行 each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用reset()。,1,姓名=高某,公司=A公司,地址=北京市);$id=each($contact);/返回数组$contact中第一个元素的键/值对,是带有4个元素的数组 print_r($id);/输出数组$id:Array(1=1 value=1 0=ID key=ID)$name=each($contact);/返回数组$contact中第二个元素的键/值对,是带有4个元素的数组 print_r($name);/输出Array(1=高某 val

16、ue=高某 0=姓名 key=姓名)$info=array(coffee,brown,caffeine);/声明一个索引数组$info list($drink,$color,$power)=$info;/将数组中的所有元素转为变量 echo$drink is$color and$power makes it special.n;/三个变量值是数组中三个元素的值 list($drink,$power)=$info;/将数组中的部分元素转换为变量 echo$drink has$power.n;/两个变量值是数组中前两个元素的值 list(,$power)=$info;/跳过前两个只将数组中第三个元

17、素转为变量 echo I need$power!n;/输出的一个变量值是数组中第三个元素的值,each()和list()函数的使用,使用while一起遍历数组,1,姓名=高某,公司=A公司,地址=北京市,电话=(010)98765432,EMAIL=);/以HTML列表的方式输出数组中每个元素的信息 echo 一个联系人信息:;while(list($key,$value)=each($contact)/将foreach语句改写成while、list()和each()组合 echo$key:$value;/输出每个元素的键/值对 echo;,3.4 使用数组的内部指针控制函数遍历数组,数组指针

18、的控制函数由于数组是由多笔资料集合而成,所以当程序需要运算处理其中某个索引位置的资料内容时,会由数组之中内定的指针,指向目标资料,以提供程序作正确的读取。下面针对数组指针控制的相关函数,作简单的说明介绍:next()、prev()、end()及 reset()这四个函数可以控制目前数组中的指针位置。next()负责将指针向后移动,prev()负责将指针向前移动;end()会将指针指向数组中最后一个元素,而 reset()函数则会将目前指针无条件移至第一个索引位置。语法格式:mixed next(数组名称);mixed prev(数组名称);mixed end(数组名称);mixed reset

19、(数组名称);mixed key(数组名称);mixed current(数组名称);,”运算符指定了每个元素的字符串下标$contact=array(ID=1,姓名=高某,公司=A公司,地址=北京市,电话=(010)98765432,EMAIL=);/数组刚声明时,数组指针在数组中第一个元素位置/使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值 echo 第一个元素:.key($contact).=.current($contact).;/第一个元素 echo 第一个元素:.key($contact).=.current($contact).;/数组

20、指针没动 next($contact);/将数组$contact中的指针向下一个元素移动一次,指向第二个元素的位置 next($contact);/将数组$contact中的指针向再下一个元素移动一次,指向第三个元素的位置 echo 第三个元素:.key($contact).=.current($contact).;/第三个元素 end($contact);/再将数组$contact中的指针移动到最后,指向最后一个元素 echo 最后一个元素:.key($contact).=.current($contact).;/最后一个元素 prev($contact);/将数组$contact中的指针倒

21、回一位,指向最后第二个元素 echo 最后第二个元素:.key($contact).=.current($contact).;/最后第二个元素 reset($contact);/再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素 echo 又回到了第一个元素:.key($contact).=.current($contact).;/第一个元素,4 预定义数组,4.1 服务器变量:$_SERVER4.2 环境变量:$_ENV4.3 HTTP GET变量:$_GET4.4 HHTP POST变量:$_POST4.5 request变量:$_REQUEST4.6 HTTP文件上传

22、变量:$_FILES4.7 HTTP Cookies:$_COOKIE4.8 Session变量:$_SESSION4.9 Global变量:$_GLOBALS,4.1 服务器变量:$_SERVER,$_SERVER 是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这是一个自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中不需要使用 global$_SERVER;PHP_SELF:当

23、前正在执行脚本的文件名 DOCUMENT_ROOT:当前运行脚本所在的文档根目录 REMOTE_ADDR:正在浏览当前页面用户的 IP 地址。,4.2 环境变量:$_ENV,在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的环境变量。这是一个自动全局变量。它在所有的脚本中都有效。在函数或方法中不需要使用 global$_ENV;,4.3 HTTP GET变量:$_GET,通过 HTTP GET 方法传递的变量组成的数组。是自动全局变量.http:/local

24、host/login.php?name=zhangsan&id=100,4.4 HHTP POST变量:$_POST,通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。与$_GET相似,只是方法不一样。,4.5 request变量:$_REQUEST,此关联数组包含$_GET,$_POST 和$_COOKIE 中的全部内容。,4.6 HTTP文件上传变量:$_FILES,通过 HTTP POST 方法传递的已上传文件项目组成的数组。是自动全局变量。,4.7 HTTP Cookies:$_COOKIE,通过 HTTP cookies 传递的变量组成的数组。是自动全局变量。,4.

25、8 Session变量:$_SESSION,包含当前脚本中 session 变量的数组。参阅 Session 函数文档以获得更多信息。,4.9 Global变量:$_GLOBALS,由所有已定义全局变量组成的数组。变量名就是该数组的索引。,5 数组的相关处理函数,5.1 数组的键/值操作函数5.2 统计数组元素的个数与唯一性5.3 使用回调函数处理数组的函数5.4 数组的排序函数5.5 拆分、合并、分解与结合数组5.6 数组与数据结构5.7 其他有用的数组处理函数,5.1 数组的键/值操作函数,array_values-返回数组中所有的值 格式:array array_values(array

26、 input),$a=array(name=张三,age=20,sex=男);$values=array_values($a);var_dump($values);/array(3)0=string(4)张三 1=int(20)2=string(2)男,array_keys-返回数组中所有的键名 格式:array array_keys(array input,mixed search_value,bool strict)其中search_value为则只返回该值的键名,$a=array(name=张三,age=20,sex=男);$keys=array_keys($a);for($i=0;$i

27、count($keys);$i+)echo$keys$i./name age sex,in_array-检查数组中是否存在某个值 格式:bool in_array(mixed needle,array haystack,bool strict)其中strict参数:是否匹配类型,$a=array(name=张三,age=20,sex=男);if(in_array(张三,$a)echo 张三在$a数组中;/”张三“在$a数组中,array_flip-交换数组中的键和值 格式:array array_flip(array trans),$a=array(name=张三,age=20,sex=男);

28、$b=array_flip($a);foreach($b as$k=$v)echo$k=$v;/张三=name 20=age 男=sex,array_reverse-返回一个单元顺序相反的数组 语法:array array_reverse(array array,bool preserve_keys)如果 preserve_keys 为 TRUE 则保留原来的键名,$a=array(name=张三,age=20,sex=男);$b=array_reverse($a);foreach($b as$k=$v)echo“$k=$v”;/sex=男 age=20 name=张三,5.2 统计数组元素的

29、个数与唯一性,count-计算数组中的单元数目或对象中的属性个数语法:int count(mixed var,int mode)如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count()将递归地对数组计数。array_count_values-统计数组中所有的值出现的次数 语法:array array_count_values(array input)array_unique-移除数组中重复的值 语法:array array_unique(array array),5.3 使用回调函数处理数组的函数,array_filter-用回调函数过滤数组中的单元 语法:rr

30、ay array_filter(array input,callback callback)依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。如果没有提供 callback 函数,array_filter()将删除 input 中所有等值为 FALSE 的条目。,array_walk-对数组中的每个成员应用用户函数语法:bool array_walk(array&array,callback funcname,mixed userdata)如果成功则返回 TR

31、UE,失败则返回 FALSE。将用户自定义函数 funcname 应用到 array 数组中的每个单元。典型情况下 funcname 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。array_walk()不会受到 array 内部数组指针的影响。array_walk()会遍历整个数组而不管指针的位置。,array_map-将回调函数作用到给定数组的单元上 语法:array array_map(callback callback,array arr1,array.)array_ma

32、p()返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map()函数的数组数目一致。,5.4 数组的排序函数,sort-对数组排序(升序)rsort-对数组逆向排序(降序)usort-使用用户自定义的比较函数对数组中的值进行排序asort-对数组进行排序并保持索引关系(关联数组排序)arsort-对数组进行逆向排序并保持索引关系 uasort-使用用户自定义的比较函数对数组中的值进行排序并保持索引关联ksort-对数组按照键名排序krsort-对数组按照键名逆向排序uksort-使用用户自定义

33、的比较函数对数组中的键名进行排序natsort-用“自然排序”算法对数组排序natcasesort-用“自然排序”算法对数组进行不区分大小写字母的排序 array_multisort-对多个数组或多维数组进行排序,5.5 拆分、合并、分解与结合数组,array_slice-从数组中取出一段 语法:array array_slice(array array,int offset,int length,bool preserve_keys)array_slice()返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。如果 offset 非负,则序列将从 array

34、 中的此偏移量开始。如果 offset 为负,则序列将从 array 中距离末端这么远的地方开始。如果给出了 length 并且为正,则序列中将具有这么多的单元。如果给出了 length 并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从 offset 开始一直到 array 的末端。,array_splice-把数组中的一部分去掉并用其它值取代 语法:array array_splice(array&input,int offset,int length,array replacement)array_splice()把 input 数组中由 offset 和 lengt

35、h 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。注意 input 中的数字键名不被保留。如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除。如果省略 length,则移除数组中从 offset 到结尾的所有部分。如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代。,array_combine-创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 语法:array a

36、rray_combine(array keys,array values)返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。如果两个数组的单元数不同或者数组为空时返回 FALSE。,rray_merge-合并一个或多个数组 语法:array array_merge(array array1,array array2,array.)array_merge()将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的

37、值将不会覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。,array_intersect-计算数组的交集 语法 array array_intersect(array array1,array array2,array.)array_intersect()返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。array_diff-计算数组的差集 语法:array array_diff(array array1,array array2,array.)array_diff()返回一个数组,该数组

38、包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。,5.6 数组与数据结构,array_pop-将数组最后一个单元弹出(出栈)语法:mixed array_pop(array&array)array_pop()弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。array_push-将一个或多个单元压入数组的末尾(入栈)语法:int array_push(array&array,mixed var,mixed.)array_push()将 array 当成一个栈,并将传入的变量压入

39、array 的末尾。array 的长度将根据入栈变量的数目增加。,array_shift-将数组开头的单元移出数组 语法:mixed array_shift(array&array)array_shift()将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果 array 为空(或者不是数组),则返回 NULL。array_unshift-在数组开头插入一个或多个单元 语法:int array_unshift(array&array,mixed var,mixed.)array_unshift()将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。,5.7 其他有用的数组处理函数,array_rand-从数组中随机取出一个或多个单元 shuffle-将数组打乱,总 结,本章必须掌握的知识点:数组在PHP开发中的应用数组的几种声明细节数组的各种遍历方式细节掌握$_SERVER、$_ENV、$_GET和$_POST应用掌握本书中提到的全部数组函数操作PHP数组需要注意的几个细节,谢 谢,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号