首页 > 后端开发 > php教程 > 为什么 PHP 的 `json_encode` 将稀疏数组转换为 JSON 对象?

为什么 PHP 的 `json_encode` 将稀疏数组转换为 JSON 对象?

Barbara Streisand
发布: 2024-11-27 08:50:10
原创
489 人浏览过

Why Does PHP's `json_encode` Convert Sparse Arrays to JSON Objects?

json_encode 将稀疏数组编码为 JSON 对象

当 JSON 编码稀疏数组(即缺少索引的数组)时,PHP 的 json_encode 函数会显示意外行为,将数组转换为 JSON 对象而不是数组。为了理解这种行为,让我们看一个例子:

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

printf("%s\n", json_encode($a));
unset($a[1]);
printf("%s\n", json_encode($a));
登录后复制

输出:

[{
    "abc": "123"
},{
    "jkl": "234"
},{
    "nmo": "567"
}]
{
    "0": {
        "abc": "123"
    },
    "2": {
        "nmo": "567"
    }
}
登录后复制

在初始编码中,json_encode 生成一个对象数组,因为稀疏数组作为对象是有效的。但是,在删除未设置的索引 (1) 后,生成的数组无法编码为数组,因为它现在有一个洞。

要解决此问题并确保数组保持编码为数组,请使用 array_values ($a) 编码前:

printf("%s\n", json_encode(array_values($a)));
登录后复制
[{
    "abc": "123"
},{
    "nmo": "567"
}]
登录后复制

通过使用 array_values 重新索引数组,任何间隙都会被删除,从而使 json_encode 能够成功生成一个有效的 JSON 数组。

以上是为什么 PHP 的 `json_encode` 将稀疏数组转换为 JSON 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板