PHP数组定义时未指定键名的数值4元素消失原因求解
PHP数组元素4消失原因分析
相关测试代码如下:
$ARRAY = [ "1" => [ 1, 2, 3 ], 4, "2" => [ "2.1" => [ 5, 6, 7 ] ] ]; echo "ARRAY : <pre>".print_r( $ARRAY, 1 )."</pre><br/>";
核心原因
该现象是PHP数组的键名类型自动转换规则、默认键分配规则共同作用导致的,值为4的元素被后续元素直接覆盖,两个核心规则说明:
- PHP数组中,值为合法数字的字符串键会被自动转换为整数类型存储,例如
"1"作为键实际等价于整数1,"2"作为键实际等价于整数2。 - 没有显式指定键名的数组元素,默认分配的键值为当前数组已存在的最大整数键值+1,若数组暂未存在整数键则默认从0开始分配。
代码执行步骤拆解
- 处理第一个元素:键为字符串
"1",自动转换为整数1,对应值为[1,2,3],此时数组最大整数键为1。 - 处理第二个元素(值为4):无显式键名,按规则分配键为1+1=2,此时数组中键2的值为4。
- 处理第三个元素:显式指定键为字符串
"2",自动转换为整数2,新的值直接覆盖了键2原有的值4,所以最终输出的数组中看不到值为4的元素。
验证方法
你可以将第三个元素的键改为非数字字符串(例如"two"),此时不会触发键名覆盖,就能看到值为4的元素:
$ARRAY = [ "1" => [1, 2, 3], 4, "two" => [ "2.1" => [5, 6, 7] ] ]; print_r($ARRAY); // 输出中会存在键2对应的值4
内容的提问来源于stack exchange,提问作者Sandro Rosa
相关产品推荐
相关产品推荐

