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

PHP数组键始终返回0:如何将DOCS_NUM设为数组键值对

问题解决思路及修正代码

核心问题分析

  1. 数组取值错误:你给出的$data是普通字符串数组,但代码里用了对象属性访问$value->DOCS_NUM,这会导致取值失败,进而出现异常键。
  2. array_merge的键重置问题:array_merge会将字符串形式的数字键(比如"12201700013")自动转换为数字索引,最终JSON里就变成了"0"这类键。

修正后的代码

情况1:$data是普通字符串数组(如你给出的示例)

$return = array('' => '- Choose Document Number -');
$data = array('12201700013','12201700014','12201700015');
if ($data) {
    $dok = array();
    foreach ($data as $value) {
        // 直接使用数组元素作为键和值
        $dok[$value] = $value;
    }
    // 使用+运算符合并数组,保留字符串数字键
    $return += $dok;
} 
echo json_encode($return);

情况2:$data是对象数组(比如从数据库ORM获取的结果)

如果$data确实是包含DOCS_NUM属性的对象数组,只需调整合并方式:

$return = array('' => '- Choose Document Number -');
if ($data) {
    $dok = array();
    foreach ($data as $value) {
        $docNum = strval($value->DOCS_NUM);
        $dok[$docNum] = $docNum;
    }
    // 用+替换array_merge,避免键被重置
    $return += $dok;
} 
echo json_encode($return);

最终输出结果

执行修正后的代码,会得到你期望的JSON:

{"":"- Choose Document Number -","12201700013":"12201700013","12201700014":"12201700014","12201700015":"12201700015"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:40:36