数组基础
含义:
数组是一系列数据的***,这些数据按照设定的顺序排列成“链状”。
注意:php中数组单元的顺序与下标无关!
数组定义(赋值):
$arr1 = array(3,11,5,18,2);//这是最常见的数组,下标是“默认下标”,是从0开始的整数;
$ arr 2 = array(" a " = >3、“bb”= >11," cc123"= >5,' d1 ' = & gt18,' xyz ' = & gt2 );关联数组,下标是字符串,公共
$ arr 3 = array(1 = >3,10= >11,3= >5,0= >18,88= >2 );下标可以人为给定;
$ arr 4 = array(1 = >3,' a1 ' = & gt11,3= >5,' mn ' = & gt18,88= >2 );可以混合下标数字和字符串;
$ arr 5 = array(5 = >3,11,3= >5,' mn ' = & gt18, 2 );//有指定的下标和“自动下标”,
//此时下标为:5,6,3,“Mn”,7
//可以看出,自动下标是“前面最大数字下标+1”
$ arr 6 = array(5 = >3,7.7= >11,3= >5,' mn ' = & gt18, 2 );//此时下标为:5,7,3,“Mn”,8
$ arr 7 = array(5 = >3,true = & gt11,false = & gt5,' mn ' = & gt18, 2 );//此时下标为:5,1,0,“Mn”,6
$ arr 8 = array(1 = >3,3= >33,true = & gt11, );//此时下标为:1,3,对应的值为:11,33。
//如果有重复的下标,后面的值覆盖前面的值;
$ arr 9 = array(1 = >3,-3 = >33, 11, );//此时下标为:1,-3,2。注:最后一个逗号“可以有”。
其他一些形式:
$ arr 10[]= 3;
$ arr 10[]= 11;
$ arr 10[]= 5;//这个数组的下标是0,1,2,这是一般情况
$ arr 11[' a ']= 3;
$ arr 11[' bb ']= 11;
$ arr 11[' cc 123 ']= 5;//数组下标为' a ',' bb ',' cc123 ',这是一般情况。
$ arr 12[1]= 3;
$ arr 12[]= 11;//此时,下标为2
$ arr 13[' cc 123 ']= 5;//数组下标是1,2,“cc123”
注意:在php中,数组单元的顺序是由它们的“放入”顺序决定的,而不是下标。
数组值:
$ v1 = $ arr 1[0];
$ I = 3;
$ v2 = $ arr 1[$ I];//获取数组下标为3的单元格的值;
一般情况下可以得到数组中一个单元格的值,一个组中一个变量的值是完全一样的!!!
数组的分类
除以键值关系:
Index:一般认为,如果数组的下标是从0开始的连续整数,则称之为index array——即类似于js array的下标。例如:
$arr1 = array(3,11,5,18,2);//这是最常见的数组,下标是“默认下标”,是从0开始的整数;
关联数组:一般认为,如果一个数组的下标都是一个“字符串”,并且在一定程度上表示了该单元的“含义”,则称之为关联数组,例如:
$conf = array(
host ' = & gt“本地主机”,
端口' = & gt3306 ,
用户名' = & gt根',
密码' = & gt'123' ,
);
混合数组:有数字下标和字符下标:
$ arr 4 = array(1 = >3,' a1 ' = & gt11,3= >5,' mn ' = & gt18,88= >2 );可以混合下标数字和字符串;
根据数组的维数(复杂度):
一维数组:
$a = array(1,11,111);
$b = array(2,22,222);
$c = array(3,33,333);
二维数组:
$dd =数组(
阵列(1,11,111),
阵列(2,22,222),
数组(3,33,333)
);
多维数组:无非是在内部继续,用数组代替。
数组的基本用法
求一维数组的平均值:
求二维数组的平均值:
求一维数组的最大值:
找到一维数组的最大值和最小值的位置:
有关数组的交换,再说两句:关于数组交换的另外两句话:
$a = array( 3,11,5,7,20,18);//下标是0,1,2,3,4,5
1:交换数组的第0和第3项:
$ v1 = $ a[0];
$ v2 = $ a[3];
$ t = $ v1;
$ v1 = $ v2;
$ v2 = $ t;//这种做法根本行不通,因为v1和v2只是2个变量,与数组无关!
正确的做法是:
$ t = $ a[0];
$ a[0]= $ a[3];
$ a[3]= $ t;
2:交换数组的第一项和最后一项:
$ pos 1 = 0;//第一项的下标
$pos2 =计数($ a)–1;//最后一项的下标
$ t = $ a[$ pos 1];
$ a[$ pos 1]= $ a[$ pos 2];
$ a[$ pos 2]= $ t;
3:交换数组的最大值和最小值:
$ pos _ ***x = & # 8230。;//经过一些计算得到最大项的下标;
$ pos _ min = & # 8230。;//经过一些计算得到最小项的下标。
$ t = $ a[$ pos _ ***x];
$ a[$ pos _ ***x]= $ a[$ pos _ min];
$ a[$ pos _ min]= $ t;
遍历数组
foreach的基本语法
Foreach( $ array变量名为[$ key = >;】$value ){
//圆形体;可以“使用”$key和值;这里;
//$key和$value是遍历语句反复得到的数组每个单元格(项)的下标和对应的值。
//此外,它总是从数组的开头按顺序取回数据。
}
指针操作和数组遍历原理:
首先,看一下阵列的“映像图”:
$ arr 4 = array(1 = >3,' a1 ' = & gt11,3= >5,' mn ' = & gt18,88= >2 );
可以形象地理解为:
数组下标:1“a1”3“mn”88对应数据:8115182
其中,箭头就是数组内部所谓的“指针”——注意,它是不可见的,不能输出,它只是一个辅助理解的图形!
描述:
1,箭头就是数组内部所谓的“指针”。
2,默认情况下,该指针指向数组的第一个单元格。
3.如果没有指定下标,数组单元格上的操作就是指针指向的单元格上的操作。
4.所谓遍历,其实就是反复获取当前单元格的键和值,放入对应的变量$key,$value,然后将指针移动到下一个单元格。
那么,作为“总数据单元”的数组具有以下指针操作功能:
1,$v1 =当前($ array);//获取数组的“值”作为指针所在的单元格;
2,$ v2 = key($ array);//获取数组的“key”(下标)作为指针所在的单位;
3,$ v3 = next($ array);//先将数组的指针移动到下一个(后一个)单元,再获取新单元的值;
4,$ v4 = prev($ array);//先将数组的指针上移(前)一个单位,再获取新单位的值;
5,$ V5 = end($ array);//先将数组的指针直接移动到最后一个单元格,然后获取新单元格的值;
6,$ V6 = reset($ array);//先将数组的指针直接移动到第一个单元格,然后获取新单元格的值;
foreach遍历过程示意图:
Foreach( $ array变量名as $ key = >;$value ){
//圆形体;可以“使用”$key和值;这里;
//$key和$value是遍历语句反复得到的数组每个单元格(项)的下标和对应的值。
//此外,它总是从数组的开头按顺序取回数据。
}
基本原理图如下:
输出结果为:输出是:
可以看到,遍历之后,指针已经超出了数组的合理位置。
使用for和next遍历数组
注意:对于php数组,不能简单地使用for循环来遍历它们。
或者:在php中,使用for循环只能循环“带连续下标的纯整数数组”;
结果:
each()函数的使用
each()函数用于获取一个数组的“当前单元格”的下标和值(并放入一个数组中),然后将指针移动到下一个单元格。
使用形式:
$a = each($数组名);//此时$a是一个数组
list()" function "的用法:
函数的作用是:一次获取数组中多个下标为0的单元格的值!
表单:
列表($变量1,$变量2,$变量3,..)= $ array
角色:
上面一行代码相当于下面的代码:
$ variable 1 = $ array[0];
$ variable 2 = $ array[1];
$ variable 3 = $ array[2];
……..
注意:在这里,变量的数量应该对应于数组的下标单元。如果变量对应的数字下标不存在,则会报错!
while+each()+list()遍历数组While+each()+list()遍历数组。
数组变量的一些细节
Foreach也是一个普通的循环语法结构,可以有break、continue等操作。
遍历过程中值变量默认的值传递方式是值传递。
结果是:
在遍历过程中,可以人为设置value变量通过引用传递:foreach($ arr as $ key = >;& amp$ value){ …}
结果是:
Foreach默认遍历原始数组。但是,如果在遍历过程中对数组进行了一些修改或指针操作,数组将被***,循环将在***的数组上继续遍历(原始数组将保持不变)。
下面演示了“默认情况下在原始数组上遍历foreach”的效果:
然后,再次演示:在某些情况下(修改或指针操作),它并没有遍历原始数组。
结果是:
在foreach中,如果value变量是通过引用传递的,无论如何都会在原始数组上完成。
本文来自暗夜殘星投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/654324.html