简体   繁体   English

PHP json_encode 生成对象,而不是数组

[英]PHP json_encode makes object, not array

I have the following PHP code which accesses DB functions, takes the response and encodes that to JSON.我有以下 PHP 代码,它访问数据库函数,获取响应并将其编码为 JSON。

Its supposed to make an error object and then an array containing all returned database rows.它应该创建一个错误对象,然后创建一个包含所有返回的数据库行的数组。

$key = $db->getKeyPermissions();

    if ($key != false) {
        $response["error"] = FALSE;
    for($i = 0; $i < count($key); $i++){
        $response["key"] = array();    
        $response["key"]["endpoint_description"] = $key[$i]["endpoint_description"];
        $response["key"]["live"] = $key[$i]["live"];
        $response["key"]["activity_name"] = $key[$i]["activity_name"];

    }
    echo json_encode($response);

instead of echo'ing a list of around 13 items, it only echos the very last item as an object.而不是回显大约 13 个项目的列表,它只将最后一个项目作为对象回显。 What am I doing wrong?我究竟做错了什么? How can I turn "key" object into a list containing all keys.如何将“键”对象转换为包含所有键的列表。

This is the JSON output.这是 JSON 输出。

{
  "error": false,
  "key": {
    "endpoint_description": "Guilds' rosters, history, and MOTDs for all guilds you are a member of.",
    "live": 0,
    "activity_name": ""
  }
}

Im fairly sure this is how it's supposed to look like, how I need it.我相当确定这就是它应该是什么样子,我需要它。

{
  "error": false,
  "key": [
    {
      "endpoint_description": "Guilds' rosters, history, and MOTDs for all guilds you are a member of.",
      "live": 0,
      "activity_name": ""
    },
    {
      "endpoint_description": "Guilds' rosters, history, and MOTDs for all guilds you are a member of.",
      "live": 0,
      "activity_name": ""
    },
    {
      "endpoint_description": "Guilds' rosters, history, and MOTDs for all guilds you are a member of.",
      "live": 0,
      "activity_name": ""
    }
  ]
}
$key = $db->getKeyPermissions();

if ($key != false) {
    $response["error"] = FALSE;
for($i = 0; $i < count($key); $i++){
    $response["key"][$i] = array();    
    $response["key"][$i]["endpoint_description"] = $key[$i]["endpoint_description"];
    $response["key"][$i]["live"] = $key[$i]["live"];
    $response["key"][$i]["activity_name"] = $key[$i]["activity_name"];

}
echo json_encode($response);

This should work as expected [$i] was missing.As per your requirement usage can be like这应该按预期工作 [$i] 丢失。根据您的要求,用法可以像

$response["key"][$i] $response["key"][$i]

Please check请检查

$key = $db->getKeyPermissions();

if ($key != false) {
    $response["error"] = FALSE;
    $response["key"] = array();
for($i = 0; $i < count($key); $i++){
    $response["key"][] = [
       "endpoint_description" => $key[$i]["endpoint_description"],
       "live" => $key[$i]["live"],
       "activity_name" => $key[$i]["activity_name"]
    ];
}
echo json_encode($response);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM