json_encode稀疏PHP数组作为JSON数组,而不是JSON对象

112 php json

我在PHP中有以下数组:

Array
(
    [0] => Array
        (
            [id] => 0
            [name] => name1
            [short_name] => n1
        )

    [2] => Array
        (
            [id] => 2
            [name] => name2
            [short_name] => n2
        )
)
Run Code Online (Sandbox Code Playgroud)

我想将JSON编码为JSON数组,生成如下字符串:

[  
    {  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    {  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
]
Run Code Online (Sandbox Code Playgroud)

但是当我调用json_encode这个数组时,我得到以下内容:

{  
    "0":{  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    "2":{  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个对象而不是一个数组.

我怎样才能json_encode将我的数组编码为数组呢?

Ngu*_*inh 183

您正在观察这个现象,因为你的数组不连续的-它有按键02,但没有1作为重点.

仅仅拥有数字索引是不够的.json_encode如果您的PHP数组是顺序的,那么它只会将您的PHP数组编码为JSON数组 - 也就是说,如果它的键是0,1,2,3 ......

您可以使用该array_values函数按顺序重新索引数组,以获得所需的行为.例如,下面的代码在您的用例中成功运行:

echo json_encode(array_values($input)).
Run Code Online (Sandbox Code Playgroud)

  • JSON 不支持关联数组。参考:https://tools.ietf.org/html/rfc7159#section-5 (4认同)
  • 但是如果键'0,2`很重要怎么办?我处于相同的情况,我无法重新索引数组. (3认同)

Bor*_*éry 73

Arrayin JSON是索引数组,因此您尝试获取的结构不是有效的Json/Javascript.

PHP Associatives数组是JSON中的对象,因此除非您不需要索引,否则无法进行此类转换.

如果你想得到这样的结构你可以做:

$indexedOnly = array();

foreach ($associative as $row) {
    $indexedOnly[] = array_values($row);
}

json_encode($indexedOnly);
Run Code Online (Sandbox Code Playgroud)

将返回如下内容:

[
     [0, "name1", "n1"],
     [1, "name2", "n2"],
]
Run Code Online (Sandbox Code Playgroud)