°

php7数组彻底解析

2019年课程规划及价格说明


PHP实战视频教程大全

1.1. 数组的概念和定义

数组,是指将若干数据按一定的顺序组合为一个整体。

每个数据被称为一个“单元”——数组单元。

每个单元由两部分构成:下标和值,下标也称为“键”(key),

数组的一个重要特点是:其中的数据有明确的顺序,而是,是其放入数组时的先后顺序。

数组有如下几种定义形式:

形式1:

$arr1  =  array(单元1,单元2,…);

 

形式2:

$arr2  =  [单元1,单元2,…];

 

单元(元素)的形式为:  [下标=>]值

 

形式3:(不推荐)

$arr3[下标1]  =  值1;

$arr3[下标2]  =  值2;

 

……

数据取值的语法形式:

$数组名[下标]; //其中,下标可以是整数的,也可以是字符串的(注意有引号)

 

 

1.2. 数组下标问题

 

1.2.1. 下标的可用值

可以使用整数或字符串。

1.2.2. 整数下标的特性

可以使用任意整数,也可以不显式使用下标,此时默认就是整数下标。

而且,从前往后,每一个没有使用下标的单元,系统给其分配的下标为之前所用过的整数下标的最大值+1(对于第一个是0)。

$arr1 = array(‘a’,  2=>’b’,  ‘c’,  ‘x’=>’d’,  ‘e’); // 其下标分别为:0,  2,  3, ‘x’, 4

$arr2 = array(5=>‘a’,  2=>’b’,  ‘c’,  ‘x’=>’d’); // 其下标分别为:5,  2,  6, ‘x’

$arr3[‘x’] = 5; //这一行,会自动创建一个数组,

$arr3[ ] = 6; //此时下标就是0

1.2.3. 索引数组

通常是指一个数组的下标是从0开始的连续的整数。

举例1:

$arr1 = array(5, 8, 12,  2,  3);

$arr2 = [8, 22,  24,  22,  12];

$arr3[ ] = 8;

$arr3[ ] = 24;

$arr3[ ] = 22;

1.2.4. 关联数组

通常是指一个数组的下标都是字符串。

$person = array(

‘name’=>’张三’,

‘age’=>18,

‘edu’=> ‘大学’,

‘salary’=>10000,

‘from’=>’北京’,

);

 

1.3. PHP数组的维数

按通常的数组元素的复杂程度,数组可以分为一维数组,二维数组,三维数组等等。

 

一维数组:

数组的每一个单元的值都是一个“非数组”值。

$arr1 = array(11,  12,  13,  14);

 

二维数组:

数组的每个单元的值都是一个“一维数组”。

$arr2 = array(

array(11, 12, 13),

array(21, 22, 23),

…..

);

 

三维数组:

数组的每个单元的值都是一个“二维数组”。

 

多维数组:

依此类推。。。。

 

不整齐数组(异形数组):

实际上,由于PHP的数组值可以是“任意数据”,因此,PHP数组的维数其实没有太大实际意义的。

所谓维数,其实是另一些编程语言中的数组的“整齐”格式的说法:一维数组类似排成一排的格子(线);二维数组类似排成一个平面的格子(面);三维数组类似堆满了一屋子的格子(体)。

而php数组,却可以更为灵活,类似这样:

array(

1,  2,  array(31,  32,  ),  4,

array(51,  52,  53,  array(541,  542,  543,  544) ),

6, array(71, 72, 73),

);

这种数组就不好说几维的了,而可以称为“异形数组。

 

1.4. 数组的遍历(重点)

1.4.1. 使用foreach语句遍历数组

遍历:就是对数组的每一项都“访问”到并进行所需要的数据处理。

 

foreach( $数组名  as  [$key =>] $value){

//这里,$key和$value只是变量,它会在遍历数组的过程中,按顺序依次取得数组每个单元的下标和值。

echo “<br />{$key} >>> {$value} “;

}

 

演示案例1:

输出以下这个数组的每一项,听求其平均值:

$arr1 = array(11,  12,  13,  14);

 

 

演示案例2:

使用数组的遍历语法,求以下这个数组的最大值及其下标!

$arr2 = array(11,  18,  21, 14, 8);

 

1.4.2. 使用for循环语句遍历数组

数组的指针:每一个数组内部,都有一个“指针”,正常情况下,指针指向数组的某个单元,起初默认是指向第一个单元。

对于数组 $arr1  =  array( 18,  22,  13,  28,  15,  33,  );

图示如下:

 

下标 0 1 2 3 4 5
18 22 13 28 15 33

初始状态下,指针指向数组的第一个单元。

php中,有如下几个函数,可以针对数组指针进行相应操作:

$re  =  current( $arr1); //取得数组中当前指针所在单元的值;

$re  =  key( $arr1 ); //取得数组中当前指针所在单元的键(下标);

$re  =  next( $arr1 ); //将数组中的指针往后移动一个位置,并取得新位置上的值;

$re  =  prev( $arr1 ); //将数组中的指针往前移动一个位置,并取得新位置上的值;

$re  =  end( $arr1 ); //将数组中的指针移动到最后一个位置,并取得新位置上的值;

$re  =  reset($arr1); //将数组中的指针移动到最前一个位置,并取得新位置上的值;

 

课堂练习:

请用for(即不用foreach)来遍历如下数组,并按顺序输出其每一个单元的键和值:

$arr1 = array(‘a’,  2=>’b’,  ‘c’,  ‘x’=>’d’,  ‘e’); //提示:count()函数可以求数组的长度

 

 

 

1.5. 常用数组函数

手册》函数参考》变量与类型相关扩展》数组》数组函数

 

max(): 获取一个数组中的最大值

min(): 获取一个数组中的最小值

count(): 获取一个数组的元素个数

in_array(): 判断一个数据是否在指定数组中。

语法形式:$b = in_array( $数组, 数据); //结果true或false

range(): 生成某个范围的连续值的数组,比如range(3, 9)会得到数组:array(3, 4, 5, 6, 7, 8, 9, );

array_keys(): 取出一个数组中的所有“键”并放入一个索引数组中。

array_values(): 取出一个数组中的所有“值”并放入一个索引数组中。

array_push(): 将一个或多个数据放入一个数组的“末端”。

array_pop(): 将一个数组的最后一个单元删除,并返回该单元的值。

array_reverse(): 将一个数组的所有单元的顺序进行反转(最前的放最后,最后的放最前)

 

 

1.6. 数组排序算法(重点/难点)

1.6.1. 数组的排序问题

常用的排序函数:sort,  rsort,  asort,  arsort

数组排序函数大全:

 

1.6.2. 冒泡排序算法

原理:

遍历一个数组,在此过程中,将相邻的两个单元的值进行比较:如果前面的比后面的大,则将两个值交换位置。这个过程到最后,数组中的最大值一定放在最后位置了。

如果将上述过程再进行一遍,则又可以确定剩余数据中的最大值放在倒数第二的位置。

然后将上述过程继续进行一遍,则可以继续确定剩余数据中的最大值放在倒数第三的位置。

依次类推。。。。。。进行若干次,就排好了。

图示:

有数组:$arr1 = array(18,  22,  12,   15,  23,  9);

原始数组 18 22 12 15 23 9
第1趟之后            
第2趟之后            
第3趟之后            
第4趟之后            
第5趟之后            

规律总结:

 

代码演示:

 

 

1.6.3. 选择排序算法

原理:

遍历一个数组,在此过程中,找出数组中的最大值及其位置。然后将该最大值的单元,跟数组的最后一个单元“交换位置”,这样进行一趟,数组中的最大值就一定放在最后位置了。

将上述过程中剩余的数据继续遍历一次,并做同样的事情,则此时剩余部分的最大值也能够放在剩余部分的最后位置——对整体而言就是倒数第二的位置。

依此类推。。。。。。。进行若干次,就排好了。

图示:

有数组:$arr1 = array(18,  22,  12,   15,  23,  9);

原始数组 18 22 12 15 23 9
第1趟之后            
第2趟之后            
第3趟之后            
第4趟之后            
第5趟之后            

规律总结:

 

代码演示:

 

结果:

 

 

1.7. 数组查找算法

查找算法,就是从一个数组中,找一个“目标”(可以是值,也可以是键)的算法。

数组的查找函数:

in_array() :在一个数组中找是否存在某个数据。

array_search() : 在数组中搜索给定的值,如果成功则返回相应的键名

array_key_exists() : 检查给定的键名或索引是否存在于数组中

 

一种查找算法:

遍历查找:不值得一提!

 

1.7.1. 二分查找:

此查找算法针对的数组有以下条件:

1,索引数组;

2,数组是已经排好序的了。

打赏
  喜欢