做项目时遇到一个问题:
获取项目接口返回的数据存入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型:2147483647
string型:2147483648