以下是对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_merge使用时数组包含数字键名的问题解决方法

    问题如下: <!DOCTYPE html> <html> <body><?php $age=array("123"=>"3 ...

  2. php循环给数组每个值加引号,php数组非数字键名加引号的必要性!

    我们可以看出, 基本上, 使用引号,和不使用引号的效率损失在3倍以上 那么, 这些效率损失到哪里去了呢? 我们分别看下, 俩个文件生成的OPCODE序列: good.php : filename: / ...

  3. php ksort升序,php数组排序之ksort-对数组的元素键名进行升序排序

    php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排序 ...

  4. php键值升序排列,php数组排序之ksort-对数组的元素键名进行升序排序_PHP教程

    php数组排序对数组的元素键名进行升序排序并且保持索引关系,有需要的朋友可以参考一下. 这次这个函数是 ksort() 函数按照键名对数组升序排序,为数组值保留原来的键. 可选的第二个参数包含附加的排 ...

  5. [转载]js:数组里面获取键名和键值

    原文地址:js:数组里面获取键名和键值 作者:function http://www.cnblogs.com/xxmb/archive/2013/11/19/3431118.html 在写php时用a ...

  6. php指定键名排序,php二维数组指定其键名对其排序的方法

    安利个小李子先 $arr=[ '2'=>'red', '5'=>'green', 'name'=>'tom' ]; $other=[ '5'=>'new red', 'name ...

  7. php二维数组指定其键名对其排序的方法

    安利个小李子先 <?php $arr=['2'=>'red','5'=>'green','name'=>'tom' ];$other=[ '5'=>'new red', ...

  8. php 交换函数,php用于反转/交换数组中的键名和对应关联的键值的函数array_flip()...

    实例 反转数组中的键名和对应关联的键值:<?php $a1=array("a"=>"red","b"=>"gre ...

  9. jquery 获取某个值得键名_js:数组里面获取键名和键值

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

最新文章

  1. nvm-windows安装和配置
  2. java面向对象三大特性:封装、继承、多态——举例说明
  3. 数据库开发基本操作-SQL Server数据库基础知识
  4. 简单获取任意app的URL Schemes
  5. 题目 2285: [蓝桥杯][2018年第九届真题]螺旋折线(数论+思维)
  6. [html] HTML5的video怎样预加载(支持全量加载)?
  7. js字符串、数组和数字常用方法总结
  8. 使用Notepad++打造称心的IDE: Python PHP Perl
  9. maya 阿诺德水晶材质_Maya教程之Arnold材质
  10. python异常处理输入不是整数_Python异常处理大全(二)
  11. sqlite 无符号32_《符号与传媒》2020年总目录
  12. 虚拟化技术天书:九宫格图解虚拟化——此文多风险,阅读需谨慎
  13. Windows Server 2012活动目录基础配置与应用(新手教程)之1---为什么需要域?
  14. B/S VS C/S
  15. PID算法原理 一图看懂PID的三个参数
  16. 使用sqlmap进行SQL注入检测
  17. 团队管理14--盘点团队
  18. 承上启下的总结+从吴军的书《态度》总结出的20条为人方法生活状态
  19. 科技进步计算机开机速度,笔者教你电脑开机慢怎么办
  20. ffmpeg 多视频 画中画

热门文章

  1. 计算机学院举办 温暖冬日 感恩社会 活动,E·活动 | 我院举办“温暖冬日,感恩社会”活动...
  2. IO缓冲区(buffer)的原理及作用
  3. 小学计算机二课堂活动总结,信息技术第二课堂活动总结
  4. 从法外狂徒张三卖房引起的代理模式
  5. Vue插件element-ui安装时报错error An unexpected error occurred: “https://registry.npmjs.org/element-ui: conn
  6. Anker—学习成长笔记
  7. SMARTS决策引擎实战练习
  8. weiit商业saas电商解决方案帮助商家增长
  9. win10编译 Fast R-CNN 所需的setup.py(rotate) tensorflow版
  10. MapReduce剥洋葱