PHP数组键值Key越界后涉及的数据类型及值范围浅谈

来源:互联网 发布:尚观mysql视频教程 编辑:程序博客网 时间:2024/04/27 23:47

做项目时遇到一个问题:

获取项目接口返回的数据存入PHP数组作为Key,但是取出来值就不一样了,哔---

经过一番大脑回路,发现竟然是PHP数组Key越界,既然遇到就简单记录一下,哎,这一生犯的错实在太多。  ╯□╰


通过PHP创建关联数组的时候,键值Key如果是数值型(可通过is_numeric()判断),则会在int有效范围内被自动转换为int型,如果超过int有效范围就会有问题,这就涉及到数组键值Key作为int型时的有效范围判断。


PHP的int型数据取值范围,与操作系统相关,32位系统上为2的31次方,即-2147483648到2147483647,64位系统上为2的63次方,即-9223372036854775808到9223372036854775807。

那么一旦PHP数组键值Key存入的数值型数据超过有效范围,如果该数值型数据是int型就会有问题,是string型数值就不再转换为int型。

如下键值Key为int型越界

<?php    $arr=array(    2147483647=>'test1',    2147483648=>'test2'  );  print_r($arr);?>
输出结果为:

Array ( [2147483647] => test1 [-2147483648] => test2 ) 

如下键值Key为数值型string越界

<?php  $arr=array(  '2147483647'=>'test1',  '2147483648'=>'test2'  );  foreach($arr as $k => $v)  {    if(is_int($k))    {      echo "int型:".$k."<br />";    }    else    {      echo "string型:".$k."<br />";    }  }?>

输出结果为:

int型:2147483647string型:2147483648