You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么如下PHP数组执行print_r后输出为Array ( [1] => 4 )?

PHP数组键名覆盖逻辑说明

你给出的代码对应实际PHP实现如下:

<?php
$array = [
    1 => "1",
    "1" => "2",
    1.5 => "3",
    true => "4"
];
print_r($array);

输出结果为Array ( [1] => 4 )是由PHP数组的底层键名处理规则决定的,具体逻辑如下:

  • 首先PHP数组会自动对非标准整数/字符串类型的键做强制类型转换,键名转换规则如下:
    1. 纯数字组成的字符串键会自动转换为对应的整数,例如字符串"1"会被转为整数1
    2. 浮点数键会被向下取整为整数,例如浮点数1.5会被转为整数1
    3. 布尔值键中true会被转为整数1,false会被转为整数0
  • 其次数组相同键名重复赋值时,后写入的值会直接覆盖之前的旧值。

对应到代码里的四次赋值过程:

  1. 首次给整数键1赋值"1",数组内容为[1 => "1"]
  2. 给字符串键"1"赋值"2",键自动转成1,覆盖旧值,数组内容变为[1 => "2"]
  3. 给浮点数键1.5赋值"3",键取整为1,再次覆盖,数组内容变为[1 => "3"]
  4. 给布尔值键true赋值"4",键转为1,最后一次覆盖,数组内容变为[1 => "4"]

最终print_r输出时就只剩下最后一次覆盖后的键值对。

内容的提问来源于stack exchange,提问作者Vinay SIngh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:15:05