第二节:类型-数组:数组的难点在于基础
首先PHP的数组不是实际上的数组而是一个有序映射。这个映射做了多方面的优化,可以把他当真正的数组使用。
至于什么事真正的数组,什么是有序映射,目前没有研究。
PHP在不明确指定key的情况下,对key进行自动添加,其中有些规律需要记住。
(key可以是integer或者string。如果key是一个integer的标准表示,则被解释为整数(例如”8“将被解释成8,而”08“还是”08“)
一.请问值(value)56的键(key)是什么。
<?php
array(5=>43,32,56,"b"=12);
?>
二.请问值(value)77的键(key)是什么。
<?php
array(-5=>19,-4=>15,"c"=11,77);
?>
三.请问值(value)6的键(key)是什么。
<?php
$array=array(1,2,3,4,5);
foreach($array as $i=>$value){
unset($array[$i]);
}
$array[]=6;
?>
第一题的答案是7(PHP会对没有指定键名的值,取当前最大整数进行索引值,而新的键名将是该值加一。如果指定键名已经有了值,则该值会被覆盖。)
第二题的答案是0,因为其中没有最大的整数,那么就会从0开始索引。
第三题的答案是5,unset函数会删除数组的值和KEY但是没有重新索引的话,还是会安装原来的索引值继续进行索引,索引这个玩意比较顽强啊。而且删除和索引是个分开的东西。(array_values()函数会对数组key进行从新索引)
另外:如果使用true作为键名将使用integer 1成为键名。使用false作为键名将使用interger 0成为键名,使用NULL作为键名将等同于使用空字符串。其实还是PHP的自动识别替换功能,对象和数组就无法识别会报错。
使用空字符串作为键名将新建(或覆盖)一个用空字符串作为键名的值,这和用空的方括号不一样!!!
如下面的例子:
<?php $row=array(0=>1,1=>2); $row[]=3; $row[NULL]=4; print_r($row); ?>
输出结果是: Array ( [0] => 1 [1] => 2 [2] => 3 [] => 4 )
很是诡异的东西。