php中的中的数组跟js里面数组是不大一样的。php中数组的下标可以整数也可以是字符串,而且数组中元素的顺序不是由下标决定的,而是由添加元素的顺序。
数组基础
$arr1 = array(元素1,元素2,。。。。。 );
array(1, 5, 1.1, “abc”, true, false);//可以存储任何数据,此时为“默认下标”,
array(2=>1, 5=>5, 3=>1.1, 7=>“abc”, 0=>true);//下标可以任意设定(无需顺序,无需连续)
array(2=>1, 5, 1=>1.1, “abc”, 0=>true)//可以加下标,也可以不加(默认下标),下标分别是:2,3,1,4,0
//默认下标规则:前面已经用过的最大数字下标+1
array(2=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true)//混合下标,同样遵循默认下标规则
array(-2=>1, ‘dd’=>5, 1.1, “abc”, true);//负数下标不算在整数下标中,而只当作字符下标
//则最后3项的下标是:0, 1, 2
array(2.7=>1, ‘dd’=>5, 1=>1.1, “abc”, 0=>true);//浮点数下标为自动转换为整数,且直接抹掉小数
array(“2.7” =>1, ‘dd’=>5, “11”=>1.1, “abc”, true)//纯数字字符串下标,当作数字看待,
//则此时下标为:2, ‘dd’, 11, 12, 13
array(2=>1, ‘dd’=>5, true=>1.1, “abc”, false=>true)//布尔值当下标,则true为1,false为0;
array(2=>1, ‘dd’=>5, 2=>1.1, “abc”, true)//如果下标跟前面的重复,则单纯覆盖前面同名下标的值
//此时相当于为:array(2=>1.1, ‘dd’=>5, “abc”, true)
其他形式;
$arr1[] = 1;
$arr1[] = 5;
$arr1[] = 1.1;//直接在变量后面使用[],就成为数组,并依次赋值。
。。。。
$arr2[‘aa’] = 1;
$arr2[‘bbbcc’] = 5;
$arrr2[5] = 1.1;
。。。。。。。。
这种形式写的下标,其实跟使用array语法结构几乎一样。
取值:通过下标。
赋值(同定义):
数组遍历:
遍历基本语法:
foreach( $arr as [ $key => ] $value ) //$key可以称为键变量,$value可以称为值变量。
{
//这里就可以对$key 和 $value 进行所有可能的操作——因为他们就是一个变量
//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串
//$value 代表每次取得元素的值,可能是各种类型。
//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。
}
数组指针和遍历原理:
每个数组内部都有一个“指针 ”,该指针指定了当前数组取值取到的是某个元素。
其实所谓的遍历就是指针一次移动,然后取值操作。
下面有一个跟指针有关的数组函数:
1、$v1=current($arr) //取到当前数组指针指向的元素的值,没有则返回false;
2、$v1 = key($arr) //取到当前数组指针指向的元素的下标,没有则返回false;
3、$v1 = prev($arr) //将指针移动到“上一个元素”,并且取到它的值;
4、$v1 = next($arr) //将指针移动到“下一个元素”,并且取到它的值;
5、$v1 = reset($arr) //将指针移动到“第一个元素”,并且取到它的值;
6、$v1 = end($arr) //将指针移动到“最后一个元素”,并且取到它的值
7、$v1 = each($arr) //取得指针当前指向的元素的下标和值,并且将指针移到下一个元素,没有则返回false。
for+next+reset遍历数组
php数组原理遍历原理揭秘
while+each+list遍历
说到这个遍历,首先我们要了解一下each和list的功能
each($arr);返回数组指针当前指向的元素的键和值,并且是双份,并且移动指针到下一位,如果没有,则返回false;
所谓的双份是什么意思?我们测试一下即可:
php数组原理遍历原理揭秘
结果:
php数组原理遍历原理揭秘
取到了第一个元素的下标和值,各两份,而且此时数组指针也指向了第二元素。
list($v1,$v2,$v3……)=$arr list的功能就很奇怪了
php数组原理遍历原理揭秘
php数组原理遍历原理揭秘
依次取得数组中对应索引的值,不过只能取到数组中索引为0,1,2……这些对应的值。如果索引有重复的,则后面值覆盖前面值。
接下来就可以通过这些进行数组遍历了:
php数组原理遍历原理揭秘
php数组原理遍历原理揭秘
foreach遍历:这个是我们常见的遍历方式,不过这个方式也有一个很特别的地方,当我们遍历过程中对数组进行改变,则会拷贝一个原数组继续遍历。可能这里不太好理解,不过看一下例子就明白了。
php数组原理遍历原理揭秘
php数组原理遍历原理揭秘
可见,数组其实已经改变了,但是foreach遍历出来的并没有增加的哪一项。此时,我们也可以输出一下当前指针位置:
php数组原理遍历原理揭秘
php数组原理遍历原理揭秘
数组指针停留在了位置3上。由此可以推断:本来是在原数组上进行遍历的,结果数组发生改变,然后拷贝了一个原数组,在拷贝的数组上完成后面的遍历。
本文由甲爪cpa联盟整理编辑!