LAMP兄弟连PHP培训配套课件LAMP兄弟连PHP培训配套课件PHP中的数组与数据结构张涛网址:电话:4007001307电话:4007001307咨询QQ:1020824692PHP中的数组与数据结构1.数组的概述2.数组的定义2.数组的定义3.数组的遍历4.预定义数组5.数组的相关处理函数5.数组的相关处理函数一、数组的概述一、数组的概述PHP中的数组实际上是一个有序图。图是一种把values映射到keys的类型。此类型在很种把values映射到keys的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性。因为可以用另一个PHP数组作为值,也可以很。因为可以用另一个PHP数组作为值,也可以很容易地模拟树。所谓的数组下标可以视为资料内容在此数组中的识别名称,通常被称为数组下标。常被称为数组下标。当索引值为数值时,也代表此资料内容在数组中的储存位置。数组中有几个索引值就被称为几维数组。数组分类:¾在PHP中有两种数组:索引数组和关联数组。索引(indexed)数组的索引值是整数,以0开始。当通索引(indexed)数组的索引值是整数,以0开始。当通过位置来标识东西时用索引数组。关联(associative)数组以字符串做为索引值,关联数关联(associative)数组以字符串做为索引值,关联数组更像操作表。索引值为列名,用于访问列的数据。二、数组的定义2.1直接赋值的方式声明数组2.2使用array()语言结构新建数组2.2使用array()语言结构新建数组2.3多维数组的声明数组常用的赋值方式:由于PHP是属于弱类型数据,因此源代码中的数组并不由于PHP是属于弱类型数据,因此源代码中的数组并不需要经过特别的声明操作,直接将一组数值指定给某一数组元素即可。一般情况下数组的赋值有两种方式:组元素即可。一般情况下数组的赋值有两种方式:¾直接赋值方式如:$a[0]=‘spam@126.com’;$a[1]=‘abuse@sohu.com’;¾使用array函数如:$a=array(“spam@126.com“,”abuse@sohu.com”);$a=array(spam@126.com,abuse@sohu.com);2.1直接赋值的方式声明数组直接赋值格式:直接赋值格式:$数组变量名[索引值]=资料内容其中索引值(下标)可以是一个字符串或一个整数。其中索引值(下标)可以是一个字符串或一个整数。等价于整数(不以0开头)的字符串值被当作整数对待。因此,数组$array[3]与$array[‘3’]是引用相同的元素。因此,数组$array[3]与$array[‘3’]是引用相同的元素。但是$array[‘03’]引用的另外不同的元素。一维数组一维数组数组中索引值(下标)只有一个的数组称为一维数组。在数组中这是最简单的,也是最常用的了。在数组中这是最简单的,也是最常用的了。实例1:?php实例2:?php?php$a[0]=1;$a[1]=2;$a[2]=3;pp$a[name]=zhang;$a[sex]=man;$a[2]=3;$b[]=1;$a[sex]=man;$a[age]=23;$b[]=1;$b[]=2;$b[]=3;$b[name]=lisi;$b[]=woman;$b[age]=28;$b[6]=4;$b[]=5;$b[age]=28;$b[8]=4;$b[]=5;?[]$b[]=5;?2.2使用array()语言结构新建数组格式:格式:array([key=]value,...)//key可以是integer或者string//value可以是任何值key可以是integer或者string。如果键名是一个integer的标准表达方法,则被解释为整数(例如“8”将被解释为8,而“08”将被解释为“08”)。key中的浮点数被取整为integer。08将被解释为08)。key中的浮点数被取整为integer。PHP中没有不同的数字下标和关联下标数组,数组的类型只有一种,它可以同时包含整型和字符串型的下标。如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一。如果指定的键名已经有了值,则该值会被覆盖。实例:?php$a=array(1,2,3,4,5,6);$a=array(1,2,3,4,5,6);$b=array(one,two,three);$c=array(0=aaa,1=bbb,2=ccc);$d=array(aaa,6=bbb,ccc);$d=array(aaa,6=bbb,ccc);$e=array(name=zhang,age=20);??2.3多维数组的声明2.3多维数组的声明二维数组的声明二维数组的声明多维数组的声明方式及规则,与一维数组相同,例如:下面二维数组的声明片段:这时数组中的资料内容如下:如果以array语法声明,则如下程序片段:如果以array语法声明,则如下程序片段:三、数组的遍历3.1使用for语句循环遍历数组3.2使用foreach语句遍历数组3.2使用foreach语句遍历数组3.3联合使用list()、each()和while循环遍历数组3.4使用数组的内部指针控制函数遍历数3.4使用数组的内部指针控制函数遍历数组3.1使用for语句循环遍历数组?php$arr=array(1,3,for=4,5,6,7,8,9,10=aa,bb,cc);for($i=0;$icount($arr);$i++){echo\$arr[.$i.]=.$arr[$i].br;echo\$arr[.$i.]=.$arr[$i].br;}??3.2使用foreach语句遍历数组foreach循环结构:¾foreach仅用于数组,有两种语法。foreach(array_expressionas$value)..statement…..statementforeach(array_expressionas$key=$value)..statement…..statement第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给$value并且数组内部的指针向前移一步第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量$key。注:当foreach开始执行时,数组内部的指针会自动指向第一个单元。此外注意foreach所操作的是指定数组的一个拷贝,而不是该数组本身。定数组的一个拷贝,而不是该数组本身。?php$a=array(10,20,30,40,50,60);$a=array(10,20,30,40,50,60);foreach($aas$k=$v){echo$k=$vbr;echo$k=$vbr;}??3.3联合使用list()、each()和while循环遍历数组arrayeach(arrayarray)返回array数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和value。。键值对被返回为四个单元的数组,键名为0,1,key和value。单元0和key包含有数组单元的键名,1和value包含有数据。如果内部指针越过了数组的末端,则each()返回FALSE。each()经常和list()结合使用来遍历数组。each()经常和list()结合使用来遍历数组。voidlist(mixed...)¾它不是真正的函数,而是语言结构。list()用一步操作给一组变量进行赋值。量进行赋值。注:list()仅能用于数字索引的数组并假定数字索引从0开始。¾在执行each()之后,数组指针将停留在数组中的下一个单元或¾在执行each()之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用each遍历数组,必须使用reset()。?php$fruit=array('a'='apple','b'='banana','c'='cranberry');='cranberry');reset($fruit);while(list($key,$val)=each($fruit)){echo$key=$val\n;echo$key=$val\n;}$arr=array(one=aaa,two=bbb,three=cccc);while($sz=each($arr)){while($sz=each($arr)){//echo$sz[0].===.$sz[1].br;echo$sz[key].===.$sz[value].br;echo$sz[key].===.$sz[value].br;}?3.4使用数组的内部指针控制函数遍历数组数组指针的控制函数数组指针的控制函数由于数组是由多笔资料集合而成,所以当程序需要运算处理其中某个索引位置的资料内容时,会由数组之中内定的指针,指向目标资料,以提供程序作正确的读取。下面针对数组指针控制的相关函数,料,以提供程序作正确的读取。下面针对数组指针控制的相关函数,作简单的说明介绍:next()、prev()、end()及reset()next()、prev()、end()及reset()这四个函数可以控制目前数组中的指针位置。next()负责将指针向后移动,prev()负责将指针向前移动;end()会将指针指向数组中最后一个元素,而reset()函数则会将目前指针无条件移至第一个索引位置。语法格式:mixednext(数组名称);mixedprev(数组名称);mixedend(数组名称);mixedreset(数组名称);四、预定义数组4.1服务器变量:$_SERVER4.2环境变量:$_ENV4.2环境变量:$_ENV4.3HTTPGET变量:$_GET4.4HHTPPOST变量:$_POST4.4HHTPPOST变量:$_POST4.5request变量:$_REQUEST4.6HTTP文件上传变量:$_FILES4.6HTTP文件上传变量:$_FILES4.7HTTPCookies:$_COOKIE4.8Session变量:$_SESSION4.8Session变量:$_SESSION4.9Global变量:$_GLOBALS4.1服务器变量:$_SERVER$_SERVER是一个包含诸如头信息(header)、路径(path)和脚本位置(scriptlocations)的数组。数组的实体由web服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这是一个自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法这只不过意味这它在所有的脚本中都有效。在函数或方法中不需要使用global$_SERVER;¾PHP_SELF:当前正在执行脚本的文件名¾PHP_SELF:当前正在执行脚本的文件名¾DOCUMENT_ROOT:当前运行脚本所在的文档根目录¾REMOTE_ADDR:正在浏览当前页面用户的IP地址。¾REMOTE_ADDR:正在浏览当前页面用户的IP地址。4.2环境变量:$_ENV4.2环境变量:$_ENV在解析器运行时,这些变量从环境变量转变为PHP全局变量名称空间(namespace)。它们中的PHP全局变量名称空间(namespace)。它们中的许多都是由PHP所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的是不