以下是对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 类型

$i = 123123123123123123123123123123;
$j = '123123123123123123123123123123';
$arr1[strval($i)] = 'abc';
$arr2[$j] = 'abc';
var_dump($arr1);
echo '<br>';
var_dump($arr2);

所以在动态操作 PHP 数组时,如果不能确定键名是否会出现数字或者长度大于 int ,则统一将键名 strval 转换为 字符串来操作最为稳妥

PHP数组关于数字键名的问题的更多相关文章

  1. php中的常用数组函数(五)(数组中获取键名集合)

    array_keys($arr, $search_value, $strict); --数组中获取键名的集合. //参数1 要检索的数组:参数2 要检索的键值 默认NULL: 参数3 是否严格比较(= ...

  2. PHP 根据配置转换数组中的键名 方便给前端的时候改键名

    /** * 根据配置转换数组中的键名 * @param array $data 数据,必须为二维数组格式 [0=>[]] * @param array $keyNameMapArr 键名转换配置 ...

  3. js:数组里面获取键名和键值

    在写php时用ajax异步传回的返回数组时是json格式,在js里面处理时有时需要用到键名,此时可以用in来处理 js只有数字索引: <script> var data = new arr ...

  4. php数组array,知道键名如何提取键值

    如果是知道键值,需要查找键名,直接使用array_search()即可.现在反过来,如何操作?   (1)array_walk_recursive()加自定义函数查找   $arr=array( 'n ...

  5. PHP二维数组根据某个键名排序

    $result = array( array(           "amount": "11.00",           "date": ...

  6. array_multisort 关联(string)键名保持不变,但数字键名会被重新索引。

    $array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', ...

  7. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  8. php 数组Array 删除指定键名值

    if(array_key_exists('keyname',$array)){ //检查数组中此键名是否存在: unset($array['keyname']); //删除后位置仍然保留,但清空了键名 ...

  9. 【CodeBase】PHP将数组键名转成变量名

    <?php /** * php 把数组中的键名所为变量名键值作为变量名 */ $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>5,'e'=> ...

随机推荐

  1. [转]Resolving kernel symbols

    原:http://ho.ax/posts/2012/02/resolving-kernel-symbols/ KXLD doesn't like us much. He has KPIs to mee ...

  2. generating permunation

    generating permunation——全排列(算法汇总) #include <iostream> #include <string> #include <vec ...

  3. 如何编写makefile

    一:Makefile介绍: Makefile是为自动化编译而生.我们写好makefile文件后,只需要一个make命令,就可以完成整个项目的编译工作,大大提高了开发效率. 也许刚开始学习编程时,你不会 ...

  4. jquery validate 验证

    JSP中引入 <link href="themes/gray/easyui.css" rel="stylesheet" type="text/c ...

  5. struts1 logic:iterate bean:write标签使用

    只是截取项目中部分代码,供参考及日后查阅 用struts1标签html:select 展现select下拉列表 刚开始为如下代码: <html:select name="Shuiwuj ...

  6. linux下面配置安装nodejs+npm

    linux下 多亏这一篇文章= =我就卡死在文章所说的这个点里 附大牛链接:http://blog.sitearth.com/nodejs%E4%B8%8A%E4%BD%BF%E7%94%A8mong ...

  7. SQL删除重复数据,保留一条

    例如: id           name         value 1               a                 pp 2               a           ...

  8. TOGAF架构开发方法(ADM)之迁移规划阶段

    TOGAF架构开发方法(ADM)之迁移规划阶段 1.8 迁移规划(Migration Planning) 企业架构开发方法各阶段——迁移规划 1.8.1 目标 本阶段的目标是: 确保实施和迁移规划与企 ...

  9. JS 实现图片直接下载

    < a   href = "picName.jpg"     id = pic1   onclick = "savepic();return false;" ...

  10. 使用MFC CImage类绘制PNG图片时遇到的问题

    为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 ...