首页  >  文章  >  后端开发  >  为什么'json_encode”将稀疏 PHP 数组转换为 JSON 对象?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-21 07:53:08695浏览

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

在 json_encode 中编码为 JSON 对象的稀疏数组

当数组包含缺失索引时,它被称为稀疏数组。默认情况下,json_encode 将稀疏数组处理为 JSON 对象而不是数组。这可能会导致在各种情况下出现意外行为。

数组到对象转换的原因

JSON 语法不支持缺少索引的数组。当 json_encode 遇到稀疏数组时,它会假设它是一个对象并进行相应的转换。

示例

考虑以下代码:

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

// First JSON encoding
echo json_encode($a) . "\n";

// Unset an element
unset($a[1]);

// Second JSON encoding
echo json_encode($a) . "\n";

输出

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

在第一个编码中,数组按预期转换为 JSON 数组。但是,在取消设置索引 1 后,由于稀疏数组问题,第二次编码会生成 JSON 对象。

预防

防止此行为并确保数组编码一致,您可以在将数组传递给 json_encode 之前使用 array_values() 重新索引数组。这将删除数组中的任何漏洞,并确保 json_encode 将其视为数组。

修改后的代码

echo json_encode(array_values($a)) . "\n";

此修改后的代码将始终将 $a 编码为一个 JSON 数组,无论它是否缺少索引。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn