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中文网其他相关文章!