PHP数组关于数字键名的问题
2014-05-25 19:35
295 查看
以下是对PHP数组数字键名的几点总结:
键名长度只能在 int 长度范围内,超过int 范围后将会出现覆盖等混乱情况
在键名长度为 int 范围内存取值时,PHP会强制将数字键名转换为 int 数值型
数字键名长度大于19位时,将变成 0
键名正常长度时,字符串或数值类型一样
$i = 126545165;
$arr['126545165'] = 'abc';
$arr[126545165] = 'uio';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
长度超过整型时,键名混乱
$i = 12312312312312;
$arr['1000000000147483649'] = 'abc';
$arr[1000000000147483649] = 'uio';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
长度超过20位时,键名将变成 0
$i = 123123123123123123123123123123;
var_dump($i);
echo '<br>';
$arr[123123123123123123123123123123] = 'abc';
$arr[strval(123123123123123123123123123123)] = 'abc';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
echo '<br>';
var_dump(isset($arr[strval($i)]));
echo '<br>';
var_dump(array_keys($arr));
将变量直接作为键名存取,结果又有不同
$i = 123123123123123;
var_dump($i);
echo '<br>';
$arr[$i] = 'abc';
$arr[strval($i)] = 'abc';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
echo '<br>';
var_dump(isset($arr[strval($i)]));
echo '<br>';
var_dump(array_keys($arr));
从上面的几种测试来看:
如果键名为数字,且范围在 int 以内,字符串或者 int 不会对存取有什么影响
如果长度大于 int 时会自动转化为 float ,再转换进行存取出现各种混乱情况,甚至直接变成 0,所以最好是统一转换为 string 类型
所以在动态操作 PHP 数组时,如果不能确定键名是否会出现数字或者长度大于 int ,则统一将键名 strval 转换为 字符串来操作最为稳妥
键名长度只能在 int 长度范围内,超过int 范围后将会出现覆盖等混乱情况
在键名长度为 int 范围内存取值时,PHP会强制将数字键名转换为 int 数值型
数字键名长度大于19位时,将变成 0
键名正常长度时,字符串或数值类型一样
$i = 126545165;
$arr['126545165'] = 'abc';
$arr[126545165] = 'uio';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
长度超过整型时,键名混乱
$i = 12312312312312;
$arr['1000000000147483649'] = 'abc';
$arr[1000000000147483649] = 'uio';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
长度超过20位时,键名将变成 0
$i = 123123123123123123123123123123;
var_dump($i);
echo '<br>';
$arr[123123123123123123123123123123] = 'abc';
$arr[strval(123123123123123123123123123123)] = 'abc';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
echo '<br>';
var_dump(isset($arr[strval($i)]));
echo '<br>';
var_dump(array_keys($arr));
将变量直接作为键名存取,结果又有不同
$i = 123123123123123;
var_dump($i);
echo '<br>';
$arr[$i] = 'abc';
$arr[strval($i)] = 'abc';
var_dump($arr);
echo '<br>';
var_dump(isset($arr[$i]));
echo '<br>';
var_dump(isset($arr[strval($i)]));
echo '<br>';
var_dump(array_keys($arr));
从上面的几种测试来看:
如果键名为数字,且范围在 int 以内,字符串或者 int 不会对存取有什么影响
如果长度大于 int 时会自动转化为 float ,再转换进行存取出现各种混乱情况,甚至直接变成 0,所以最好是统一转换为 string 类型
$i = 123123123123123123123123123123; $j = '123123123123123123123123123123'; $arr1[strval($i)] = 'abc'; $arr2[$j] = 'abc'; var_dump($arr1); echo '<br>'; var_dump($arr2);
所以在动态操作 PHP 数组时,如果不能确定键名是否会出现数字或者长度大于 int ,则统一将键名 strval 转换为 字符串来操作最为稳妥
相关文章推荐
- php 操作数组array_merge使用时数组包含数字键名的问题解决方法
- js里面关于数字 字符串 数组 的问题
- php下关于中英数字混排的字符串分割问题
- 最近碰到个问题,关于php扩展编程如何返回数组的问题
- 关于PHP数组重新索引问题
- 关于jQuery.inArray(),字符串数组中不可能找到数字问题
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于PHP增删改查里面遇到的Mysql数组调用值为null的问题
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于PHP中数组的增删改 统计问题
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于php中from提交checkbox数组数据未选中的不提交的问题
- php下关于中英数字混排的字符串分割问题
- PHP数组数字键值的最大值问题
- 关于PHP在数组对象与JSON数据之间的转换问题(编码问题)
- 关于php扩展编程如何返回数组的问题
- php中关于数组的指针移动问题!
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于数组的问题(连续子数组的最大和、数组中出现次数超过一半的数字、调整数组顺序使奇数位于偶数之前)
- 关于数字与数字数组与字符型数字数组的转换问题