素材牛VIP会员
php数组问题
 Sm***ty  分类:PHP代码  人气:2270  回帖:11  发布于6年前 收藏

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

(

[1] => 12

[1.0] => 13

)

 标签:php

讨论这个帖子(11)垃圾回帖将一律封号处理……

Lv6 码匠
pu***04 交互设计师 6年前#1

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

Lv3 码奴
雨***梦 页面重构设计 6年前#2

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

Lv6 码匠
阿***灯 页面重构设计 6年前#3

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

Lv6 码匠
12***23 页面重构设计 6年前#4

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

Lv5 码农
野***7 CEO 6年前#5

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

Lv6 码匠
85***32 交互设计师 6年前#6

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

Lv7 码师
飞***天 学生 6年前#7

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

Lv5 码农
wg***ge 页面重构设计 6年前#8

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

Lv4 码徒
那***n 产品经理 6年前#9

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/...

Lv5 码农
马***1 技术总监 6年前#10

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

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取