有个问题求大神解释

Amos_ 2014-01-20 11:39:31
下面的代码运行结果是TRUE,求解释!!!

$a = '9900000020000004';
$b = array('2809083640000001','9900000020000002','9900000020000003');
$result = in_array($a, $b);
var_dump($result);



...全文
281 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄袍披身 2014-01-27
  • 打赏
  • 举报
回复
5.5.6 发来贺电 false.
鱼为情 2014-01-27
  • 打赏
  • 举报
回复
#10 var_dump(9900000020000004); var_dump(9900000020000002); var_dump(9900000020000003); 这三个打印出来的确实都是:float(9.90000002E+15) 但是我打印$a = '9900000020000004'; $b = array('2809083640000001','9900000020000002','9900000020000003'); $result = in_array($a, $b); var_dump($result); 结果是 bool(false); php 5.4测试。
傲雪星枫 2014-01-21
  • 打赏
  • 举报
回复
$a = '9900000020000004'; $b = array('2809083640000001','9900000020000002','9900000020000003'); 在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的。 因$a 与 $b内元素都可以转换为数字,因此php会对字符串转成数字再进行比较,因为整型范围会溢出,因此会转换成浮点型(float) var_dump(9900000020000004); var_dump(9900000020000002); var_dump(9900000020000003); 9900000020000004 与 9900000020000002,9900000020000003 的浮点数相同, 都是float(9.90000002E+15) 因此in_array返回true。 如果不想php转换类型比较,用in_array($a, $b, true);可解决此问题。
xuzuning 2014-01-20
  • 打赏
  • 举报
回复
$result = in_array($a, $b, true);
KazJ 2014-01-20
  • 打赏
  • 举报
回复
PHP Version 5.3.10 结果是true
xuzuning 2014-01-20
  • 打赏
  • 举报
回复

你的php版本是多少?
迷茫乱 2014-01-20
  • 打赏
  • 举报
回复
表示不知道这个是怎么回事
嘻哈大咖秀 2014-01-20
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
php 5.4.20
貌似5.3的都不行
blizzf99 2014-01-20
  • 打赏
  • 举报
回复
整型溢出~~
Amos_ 2014-01-20
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
你的php版本是多少?
我的php版本是 5.3.10
xuzuning 2014-01-20
  • 打赏
  • 举报
回复
php 5.4.20
嘻哈大咖秀 2014-01-20
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
你的php版本是多少?
版主的php版本是多少

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧