json_encode丢弃array_values键?

时间:2014-07-22 15:27:38

标签: php arrays json

我正在使用PHP并遇到json_encode()的问题。该过程擦除由“array_values”命令设置的初始“密钥”,如下所示。

array(1) { 
    [0]=> array(5) { 
        ["ID"]=> string(4) "2679" [
        "PackageName"]=> "Update for Windows 8.1 for x64-based Systems (KB2965065)" 
        ["Description"]=> string(262) "Install this update to resolve issues in Windows." 
        ["KB"]=> string(7) "2965065" 
        ["Repo"]=> string(21) "Windows Update Server" 
}

$packages = array_values($this->control->fetchPackageTables($this->input->get("platform")));             

[
    {
        "ID":"2679",
        "PackageName":"Update for Windows 8.1 for x64-based Systems (KB2965065)",
        "Description":"Install this update to resolve issues in Windows.", 
        "KB":"2965065",
        "Repo":"Windows Update Server"
    }
]

我尝试通过数组循环使用foreach并设置一个数字,但它仍然被丢弃。有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

JSON不支持关联数组。

JSON / Javascript中的数组仅包含编号索引。关联数组将转换为对象/属性。

没有任何东西掉线。 [ ]表示一个数组。 { }表示一个对象。您在数组中有one个对象。

答案 1 :(得分:0)

我认为它删除索引的原因是因为它们是按数字索引的,因此在编码时它只是认为它不需要键,你可以尝试将键设置为字符串而不是整数,因此编码不会擦拭它们。

答案 2 :(得分:0)

我将此作为答案添加,因为我目前无法发表评论,并且对我自己很有帮助。如果您发现json的一段被编码为一个数组而不是一个对象(例如:键被删除)。

您可以像这样添加JSON_FORCE_OBJECT:     json_encode($foo,JSON_FORCE_OBJECT); 这将强制将所有内容编码为对象,保留所有键。

您可以在此处找到更多标记:http://php.net/manual/en/function.json-encode.php