PHP json_encode函数 数组中键值为数值索引时编码为对象格式而不是数组格式

<?php 

$arr=array(
   '0'=>'张三',
   '1'=>'李四'
)

echo json_encode($arr);

//结果为
['张三','李四']

//不是想要的结果 预期的结果是
//{"0":"张三","1":"李四"}


//解决方案
$arr=new ArrayObject($arr)

echo json_encode($arr)


PHP 中,`json_encode` 函数用于将 PHP 数组对象转换为 JSON 格式的字符串。默认情况下,当传递一个空数组给 `json_encode` ,它会将其编码为一个空的 JSON 对象 `{}` 字符串,而不是一个空数组 `[]`。这种行为取决于数组是否被判定为“关联数组”[^1]。 ### 示例代码 ```php $data = []; $jsonString = json_encode($data); echo $jsonString; // 输出: {} ``` 上述代码中,`$data` 是一个空数组,默认情况下 `json_encode` 将其转换为空对象 `{}` 的字符串表示形式。 如果希望强制将数组对象的形式编码,可以使用 `JSON_FORCE_OBJECT` 选项: ```php $data = []; $jsonString = json_encode($data, JSON_FORCE_OBJECT); echo $jsonString; // 输出: {} ``` 即使数据不是关联数组,该选项也会确保输出是一个 JSON 对象。 ### 判断是否为索引数组 PHP 在内部判断数组是否为索引数组(即顺序数字键的数组),如果是,则 `json_encode` 会将其视为数组并返回 `[]`。例如: ```php $data = [1, 2, 3]; $jsonString = json_encode($data); echo $jsonString; // 输出: [1,2,3] ``` 对于非索引数组(例如带有字符串键的数组): ```php $data = ["key" => "value"]; $jsonString = json_encode($data); echo $jsonString; // 输出: {"key":"value"} ``` 若需要始终将空数组编码对象,可以结合条件判断手动处理: ```php $data = []; if (is_array($data) && empty($data)) { $jsonString = json_encode((object)$data); } else { $jsonString = json_encode($data); } echo $jsonString; // 输出: {} ``` 这样可以确保空数组始终被转换为 `{}` 字符串。 ### 总结 - 默认情况下,`json_encode` 会将空数组转换为 `{}`。 - 使用 `JSON_FORCE_OBJECT` 可以强制输出对象格式。 - 手动转换 `(object)$data` 能够确保空数组始终以对象形式呈现。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值