php数组问题

$a=array();
$a[1]=10;
$a[1.0]=11;
$a['1']=12;
$a['1.0']=13;
print_r($a);
输出结果如下,为什么会这样的结果

(

[1] => 12

[1.0] => 13

)

阅读 5.3k
10 个回答

key 可以是 integer 或者 string。value 可以是任意类型。

此外 key 会有如下的强制转换:

包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

From:http://www.php.net/manual/zh/...

PHP是脚本语言,数字类字符串会进行隐式转换的

后一个值覆盖了前一个值,很正常

首先数组里不可能存在两个一样的key,然后当key一样的时候,那么就相当于覆盖赋值

弱类型语言数组用1和'1'作为数组的KEY,实际上是操作的同一个元素

后面的元素复制取代了前面的赋值,所以数组显示的是后面的,还有就是php是弱类型语言,会隐式转换。

我觉得应该是 底层都是用字符串当索引的,但是没看过 可以去看下

除非0开始并且有顺序的key,否则 key 都是字符串吧

后面一个肯定会覆盖前面一个值,隐式转换

后面的 $a['1'] 中的 带有单引号的 数字 1 当做 键 使用的时候 就会被php 转换成 $a[1], php数组中 如果键相同就会后面的覆盖前面的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题