PHP数组键始终返回0:如何将DOCS_NUM设为数组键值对
问题解决思路及修正代码
核心问题分析
- 数组取值错误:你给出的
$data是普通字符串数组,但代码里用了对象属性访问$value->DOCS_NUM,这会导致取值失败,进而出现异常键。 - 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
相关产品推荐
相关产品推荐

