一. 在同一数组变量中,索引关联同时并存时的索引引用规律:
PHP中数组分索引数组与关联数组,并且索引数组与关联数组能同时共存,例如:
$myarray = array("foo","bar","site"=>"mosang",123);
$myarray = array("foo","bar","site"=>"mosang",123);
$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) }
array(4) { [0]=> string(3) "foo" [1]=> string(3) "bar" ["site"]=> string(6) "mosang" [2]=> int(123) }
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>";
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");
array(3) { [60]=> string(10) "mosang.net" [61]=> int(88) [62]=> string(5) "heiry" }
$mixarray = array("60"=>"mosang.net",88,"heiry");
var_dump($mixarray);
//输出如下:
array(3) { [60]=> string(10) "mosang.net" [61]=> int(88) [62]=> string(5) "heiry" }
$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");
array(3) { [0]=> int(88) [60]=> string(10) "mosang.net" [61]=> string(5) "heiry" }
$mixarray = array(88,"60"=>"mosang.net","heiry");
var_dump($mixarray);
//输出结果如下
array(3) { [0]=> int(88) [60]=> string(10) "mosang.net" [61]=> string(5) "heiry" }
$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");
array(2) { [0]=> string(5) "third" [1]=> string(6) "second" }
$mixarray_2 = array("first","second","0"=>"third");
var_dump($mixarray_2);
//输出结果如下
array(2) { [0]=> string(5) "third" [1]=> string(6) "second" }
$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 = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
输出结果:
//所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 "d"
array(1) {
[1]=>
string(1) "d"
}
//所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 "d"
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];
$myarray = ["student1"=>"迪丽热巴","student2"=>"马尔扎哈","student3"=>"古力娜扎"];
foreach ($myarray as $item => $value){
echo "key为{$item}的值是:{$value}<br>";
}
echo "第一个学生的姓名为:".$myarray[0];
$myarray = ["student1"=>"迪丽热巴","student2"=>"马尔扎哈","student3"=>"古力娜扎"];
foreach ($myarray as $item => $value){
echo "key为{$item}的值是:{$value}<br>";
}
echo "第一个学生的姓名为:".$myarray[0];
输出结果:
key为student1的值是:迪丽热巴
key为student2的值是:马尔扎哈
key为student3的值是:古力娜扎
第一个学生的姓名为:
key为student1的值是:迪丽热巴
key为student2的值是:马尔扎哈
key为student3的值是:古力娜扎
第一个学生的姓名为:
可见都是关联数组,使用下标不能访问到元素。
$myarray = ["student1"=>"迪丽热巴","马尔扎哈","student3"=>"古力娜扎"];
foreach ($myarray as $item => $value){
echo "key为{$item}的值是:{$value}<br>";
echo "第一个学生的姓名为:".$myarray[0];
$myarray = ["student1"=>"迪丽热巴","马尔扎哈","student3"=>"古力娜扎"];
foreach ($myarray as $item => $value){
echo "key为{$item}的值是:{$value}<br>";
}
echo "第一个学生的姓名为:".$myarray[0];
$myarray = ["student1"=>"迪丽热巴","马尔扎哈","student3"=>"古力娜扎"];
foreach ($myarray as $item => $value){
echo "key为{$item}的值是:{$value}<br>";
}
echo "第一个学生的姓名为:".$myarray[0];
输出如下:
key为student1的值是:迪丽热巴
key为0的值是:马尔扎哈
key为student3的值是:古力娜扎
第一个学生的姓名为:马尔扎哈
key为student1的值是:迪丽热巴
key为0的值是:马尔扎哈
key为student3的值是:古力娜扎
第一个学生的姓名为:马尔扎哈