php的数组分为2种——索引数组和关联数组,索引数组就是我们通常说的数组,底层的数据结构是数组;而关联数组则是我们说的map,底层的数据结构是hash
索引数组和关联数组的生成方式如何?举个例子:
索引数组:$arr = array('a','b'); $arr = array(0=> 'a', 1=>'b');
关联数组:$arr = array('a' => 'a', 'b' ='b');
一般来说,带有key的是关联数组(从0开始顺序的除外),不带的为索引数组
但是以下生成方式生成的数组要注意:
$c = array(1 => 'b', 0 =>'a'); // 关联数组,虽然只是0和1的位置换了,对我们上层取数据没影响,但是对底层的存储已经发生了影响
$d= array(1 => 'b', 'a'); //关联数组,虽然后面是顺序的,但是少了索引为0的位置
$e = array(0 => 'a', 1 =>'b', 3 => 'c'); //关联数组,前面虽然连续,但是少了索引为2的位置
值得注意的是,php默认生成的空数组为索引数组,要改变此机制,只需要将数组强制object,这对转换成json有很大帮助,即
$arr = array();// 索引数组
$arr = (object) array();// 关联数组