PHP数组关于数字键名的问题

以下是对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数组关于数字键名的问题,布布扣,bubuko.com

时间: 2024-10-10 13:58:24

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

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

/** * 根据配置转换数组中的键名 * @param array $data 数据,必须为二维数组格式 [0=>[]] * @param array $keyNameMapArr 键名转换配置,key为旧的键名,value为新的键名,若找不到旧键名或者新旧键名一致则不进行转换 * @param bool $unsetOldKey 是否删除旧的键值对,默认是 * @return array */ public function changeKeyName($data, $keyNameMapAr

项目中阶梯费率解决方法,数组中通过键名查找键值

<?php $a = 3.5;$arr = array("1"=>4,"2.5"=>5,"5"=>6);//小数做键名,需要加引号$arr = array_flip($arr); foreach ($arr as $key => $value) { $b[] = $value;} 主要思路就是把数组翻转,取出原数组所有键名组成一维数组,判断出在哪个阶梯范围,再去反转的数组中array_search出对应的键值,这个键

数组里面获取键名和键值

https://www.cnblogs.com/xxmb/archive/2013/11/19/3431118.html https://www.cnblogs.com/platycoden/p/5204362.html 对于json对象: var arr={'a':1,'b':2,'c':3};for (var k in arr){  alert(k+' : '+arr[k]);  } 对于数组对象: var arr = [        [10,'zhangsan','male'],    

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

$array = [ '2' => [ 'title' => 'Flower', 'order' => 3 ], '3' => [ 'title' => 'Rock', 'order' => 1 ], '4' => [ 'title' => 'Grass', 'order' => 2 ] ]; $keys = array_keys($array); array_multisort( array_column($array, 'order'), SORT

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

$result = array( array(           "amount": "11.00",           "date": "2015.10.10",           "title": "缴纳会员费"       ), array(           "amount": "11.00",           "da

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

php合并数组并保留键值的方法例子1,数组使用字符串键名,相同的键名会被后面的覆盖<pre><?php$arr1 = array('name'=>'fdipzone');$arr2 = array('name'=>'terry'); $result = array_merge($arr1, $arr2); print_r($result);?></pre>输出:<pre>Array( [name] => terry)</pre>

PHP 二维数组排序保持键名不变

对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例: <?php $data = array( 1001 => array( 'age' => 22, 'name' => '鸠摩智' ), 1007 => array( 'age' => 21, 'name' => '慕容复' ), 1004 => array( 'age' => 27, 'nam

通过PHP current()函数获取未知字符键名数组第一个元素的值

通过PHP current()函数获取未知字符键名数组第一个元素的值 在开发中经常遇到这样问题,获取数组第一个元素的值,如果是数字索引那还好,直接$array[0],如果键名是字符串,你又未知这个字符串呢?用current()函数就可以做到. 当然,你可以用array_shift()函数,但是它会破坏原数组(即,删除数组中的第一个元素,并返回被删除元素的值). 关于 current() 函数: 每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元.用current(

什么是对象?对象命名和访问规则,主要是数字和特殊字这种键名

傻瓜式的理解,对象就是包在大括号{}里面的东西,对象有键/值                      key/value //简而言之,js对象只要不符合js变量命名规则的都需要加上引号,无论是在定义的时候还是引用的时候,且对象不能像数组那样使用下标访问,只能使用键名key(属性名)访问 var obj = {'1':3,'@**^%*':'我是符号哦',3:4,'tom ni hao':2}; console.log(obj[1]);//3 ,虽然这里新版Chrome没有报错,但因其不符合j