一. 在同一数组变量中,索引关联同时并存时的索引引用规律:
PHP中数组分索引数组与关联数组,并且索引数组与关联数组能同时共存,例如:
$myarray = array("foo","bar","site"=>"mosang",123);
我们var_dump该数组变量,结果如下:
array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" ["site"]=> string(6) "mosang" [2]=> int(123) }
可以看到,该数组中的关联项”site”=>”mosang”并没有占用数组下标,下标引用最大值是2。
echo $myarray[0]."<br>"; echo $myarray[1]."<br>"; echo $myarray[2]."<br>";
输出结果(并没有“mosang”值):
foo bar 123
二. 关联数组中的key如果为整数字符串,则key自动转化为数组索引值:
$mixarray = array("60"=>"mosang.net",88,"heiry"); var_dump($mixarray); //输出如下: array(3) { [60]=> string(10) "mosang.net" [61]=> int(88) [62]=> string(5) "heiry" }
可以看出,key“60”自动转成了数组索引,并且之后的索引值在此基础上增加。
$mixarray = array(88,"60"=>"mosang.net","heiry"); var_dump($mixarray); //输出结果如下 array(3) { [0]=> int(88) [60]=> string(10) "mosang.net" [61]=> string(5) "heiry" }
这种情况下,我们不能以数组长度for循环遍历。
三.手动指定数组索引,如果该索引值与之前相同,则之前的值会被覆盖:
$mixarray_2 = array("first","second","0"=>"third"); var_dump($mixarray_2); //输出结果如下 array(2) { [0]=> string(5) "third" [1]=> string(6) "second" }
可见:该数组实际上只有两个元素,原索引0值“first”的元素已经被覆盖。
count统计时会统计两种数组的总个数,因此混合数组中,不能使用for循环来遍历(造成越界)。
四. 混合数组的强制类型转换
——包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。
——浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
——布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
——Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
——数组和对象不能被用为键名。坚持这么做会导致警告:
$array = array( 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); var_dump($array);
输出结果:
array(1) { [1]=> string(1) "d" } //所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 "d"
五.同一个数组元素,只能有一种有效访问方式(数组下标和者关联名称其中之一):
$myarray = ["student1"=>"迪丽热巴","student2"=>"马尔扎哈","student3"=>"古力娜扎"]; foreach ($myarray as $item => $value){ echo "key为{$item}的值是:{$value}<br>"; } echo "第一个学生的姓名为:".$myarray[0];
输出结果:
key为student1的值是:迪丽热巴 key为student2的值是:马尔扎哈 key为student3的值是:古力娜扎 第一个学生的姓名为:
可见都是关联数组,使用下标不能访问到元素。
$myarray = ["student1"=>"迪丽热巴","马尔扎哈","student3"=>"古力娜扎"]; foreach ($myarray as $item => $value){ echo "key为{$item}的值是:{$value}<br>"; } echo "第一个学生的姓名为:".$myarray[0];
输出如下:
key为student1的值是:迪丽热巴 key为0的值是:马尔扎哈 key为student3的值是:古力娜扎 第一个学生的姓名为:马尔扎哈