纯干货,PHP从入门到精通视频教程,只生产优质产品

从入门到精通PHP
本文是连载文章PHP入门的第二篇文章
建议先阅读前一篇文章:PHP从基础到入门(3)
数组基础
数组是一系列数据的集合,它们按设定的顺序排列成“链形”。
注: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=>5mn=>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=>5mn’=>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,注:最后一个逗号“可以有”。
其他形式:
$ar10[]=3;
$ar10[]=111;
$ar10[]=5;///该数组下标0,1,2,常规情况
$arr11[‘a’]=3;
$arr11[‘bb’]=11;
$ar11[cc123]=5;///这个数组下标为“a’,’bb”,”cc123″,常规情况
$arr12[1]=3;
$ar12[]=111;///此时下标为2
$ar13[cc123]=5;//该数组下标为1,2,cc123
特别注意:在php中,数组单元的顺序是由其“放入”顺序决定的,而不是下标。
数组取值:
$v1=$ar1[0];
$i=3;
$v2=$ar1[$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=>5mn=>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
需求1:第0项和第3项交换数组:
$v1=$a[0];
$v2=$a[3];
$t=$v1;
$v1=$v2;
$v2=$t;//这种做法根本不好,因为v1和v2只是两个变量,与数组无关!
正确的做法是:
$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=>5mn=>18,88=>2);
视觉上可以理解为:
数组下标:1“a1”3“mn88对应数据:8115182
其中,箭头是数组内的所谓“指针”——注意,不可见,不可输出,只是辅助理解的图形!
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($arras$key=>&$value){…}
结果为:
默认情况下,foreach是在原始数组上进行的。但是,如果在复制过程中对数组进行了修改或指针操作,复制数组后将继续复制数组上的复制循环(原始数组保持不变)。
以下演示是“foreach默认为原数组上的遍历”的效果:
然后,演示:在某些情况下(修改或指针操作),而不是在原始数组中。
结果为:
如果foreach中的值变量是引用传递,则无论如何都是在原数组上进行的。

