>  기사  >  php教程  >  php核心技术-数组的使用

php核心技术-数组的使用

WBOY
WBOY원래의
2016-06-21 08:50:16797검색

 

数组:是一种数据类型。集合型。

一组具有相同类型的数据的集合。

一些 键值对的 有序集合。Key/value 键值对。

数组是由  元素 组成:

元素是一组键值对。其中 键 元素下标 值 元素 值。

遍历:从头到尾 依次去处理所有的数组元素。

定位数组元素的方式:

由于一个数组内 会存在很多元素,通常当我们定位数组的元素时,采用的形式都是数组的元素的 下标的方式。

但有时,尤其是在遍历(集中,循环处理数组内的每个元素时)时,我们采用的元素定位方式为 数组指针。 同一时刻,这个指针只能指向一个数组元素。

如何获得一个数组?如何定义一个数组?

        Array();

    arrayname[]=值;

通常情况下,我们在定义数组的元素时,都需要为元素指定下标,与值。

其中数组元素的下标,要求为整型 或者是字符串类型。

数组元素的值可以是任意数据类型。

 

下标:

通常都是整型和字符串型。但是如果意外的为数组元素设置了一个其他类型下标,php会尝试将其他类型的下标转换成合理的形式。但是不可以使用 数组和对象 作为下标。

 

如果在定义数组元素时,没有制定下标的话,意味着 我们需要使用整型下标。下标的大小是根据当前的数组结构而定的。会根据当前数组内,最大的整型下标的值来确定新的下标,方式是 +1的形式。如果当前数组内没有一个整型值,会从0 开始。

如果我们需要定义一个下标从1开始的数组,应该如何定义?

 

如果下标的定义 是一个可以被直接转化成 整型的字符串,那么这个字符串会被转化成整型:

 

与之相对,如果不能直接被转化成整型,则继续使用字符串类型。

 

可以使用 空字符串作为下标:可以使用 负数作为下标,但是不会使用这个负数作为生成下标的依据(不会在负数的基础上+1);

 

Tip:以上的测试 同样适用于与 [] 语法,也就是不同的数据类型,可以写到中括号内。

中括号内[],应该使用数组元素的下标来定位元素。

 

[表达式]内可以写表达式

 

 

也可以写常量:

但是 当我们使用字符串做下标时, 应该在字符串周围增加引号,否则则个标识符会首先被解析成常量,如果没有相应的常量,才会被认作字符串。会降低效率。甚至在存在相应常量时,业务逻辑会出现问题:

 

Tip:出现以上问题的原因 不是由于[]的解析造成的,而是php在解析常量时 都这么处理。

 

 

Php中由于元素的值可以是任意的数据类型,因此也可以是数组类型。当元素的值是数组类型时,我们可以称作为多维数组。

但是,本质上是没有多维数组的。上面所说的多维数组,只是某个数组元素的值为数组而已。

同样 如果是多维数组的话,可以使用多个[]去访问到某个元素的值:

 

 

数组的分类:

按照数组元素的索引类型分成:

索引数组和关联数组。

索引数组:元素的下标 都是数值的数组, 典型的是 从0开始的一系列的数组元素。

关联数组:元素的下标与元素的值有关联性,元素下标是字符串类型,字符串可以具有描述信息的功能。

 

 

但是由于php数组的特殊性,php的数组元素的下标 既可以数值索引也可以是字符串关联,可以同时存在。

 

 

因为php的数组,在数据结构上 是一个链表(hash表)实现的,是键值对。

由于数组内会包含多个元素,我们通常情况下都是使用的某个元素的值,因此总会遇到遍历数组的情况。

 

数组的遍历:

数组的变量基本上都是依赖于数组的指针完成。

当我们刚刚建立一个数组的时候,数组内部的指针是指向数组的第一个元素的。如果每次我们能够获得 数组指针所指向的元素的信息的话。那么我们能够从头到尾移动数组指针的话,就能够完成数组的遍历。

我们最常用的遍历数组的方法 就是 foreach 语言结构:

 

Foreach(需要遍历的数组 as 保存当前数组指针所指向的元素的值变量) {

    循环体。可以在这里处理当前遍历到的数组元素

} 

 

Foreach(需要遍历的数组 as 保存当前数组指针所指向的元素的下标变量 =>  保存当前数组指针所指向的元素的值变量) {

      循环体。可以在这里处理当前遍历到的数组元素

 

注意:在上面的代码中,我们并没有显示的执行 移动数组指针的操作,但是foreach会在每一次获得元素信息后,将当前的指针向下移动一位。并且在遍历完成后,foreach会将数组指针移动到数组的开头。可以保证一个数组可以被无限次的foreach。

如果是多维数组的话,应该如何遍历?

 

可以在foreach中 再次嵌套foreach达到效果:

 

Foreach的传递方式:值传递:

 

但是 与 第一个,值传递相对的 还支持引用传递:

 

如果需要修改原数组的话,还可以通过直接操作原数组的形式:

 

字符串函数:

少量普通字符串的处理,通常使用字符串处理函数完成

处理的方式,按照字节去处理。

Gbk编码 一个汉字占2个字节

Utf8编码 一个汉字占3个字节。

Strlen(); 长度

Substr(字符串,起始位置,截取长度):截取字符串

 

按照字符去处理。

例如javascript的字符串就是按照字符处理。

Php默认不能使用字符的方式处理,需要使用php的多字节字符扩展来实现。

Php.ini中:

 

Mb_strlen();

Mb_substr();

 

正则表达式

批量字符串处理,正则表达式。

验证用户输入的数据是否是邮箱? 是否符合某一个字符串规则。

常见的使用正则的地方:

表单验证 - 用户数据的验证(来自浏览器的数据,get,post)。会使用 javascript的正则 和 php的正则联合处理。

采集的处理 – 爬虫:



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.