PHP数组转JSON时数字键名格式异常及字符串转换需求
解决PHP中数字字符串键导致JSON格式异常的问题
我来帮你搞定这个问题!核心问题出在array_merge的行为和PHP数组键的类型处理上,咱们一步步解决:
问题根源
当你用array_merge合并数组时,如果键是数字格式的字符串(比如"12345"),PHP会把它当作整数数组索引来处理,合并后这些键会被重置为连续的数字索引,所以json_encode输出的是数组格式["ASDS"],而不是你需要的对象格式。另外,原代码没有强制确保键值为字符串,可能导致JSON输出不符合标准(标准JSON要求对象键和字符串值必须带双引号)。
解决方案
放弃array_merge,直接通过字符串键赋值的方式添加元素,同时强制将$cf和$nome转换为字符串类型:
$array = []; // 初始化空数组 while ( $row = mysqli_fetch_assoc( $query ) ) { $cf = (string)$row["cf"]; $nome = (string)$row['nome']; $array[$cf] = $nome; // 直接赋值,保留字符串键 } echo json_encode( $array, JSON_UNESCAPED_UNICODE ); // 可选:添加JSON_UNESCAPED_UNICODE避免中文等特殊字符转义
效果验证
- 当
$cf = "12345"、$nome = "ASDS"时,输出标准JSON对象:{"12345":"ASDS"} - 当
$cf = "AS123"时,输出:{"AS123":"ASDS"}
这样既解决了数字字符串键被转成数组索引的问题,又确保了所有键和值都是字符串类型,输出完全符合标准JSON格式,完美适配你的API要求。
内容的提问来源于stack exchange,提问作者Marcus J.Kennedy
相关产品推荐
相关产品推荐

