将PHP数组转换为JSON数组,并通过SLIM3获得响应

时间:2018-09-23 10:20:47

标签: php mysql arrays json slim

我在将数据库查询结果转换为json数组时遇到问题。我的输出看起来像这样:

{
  "user_id": "1",
  "username": "testuser1",
  "user_permissions": [
    {
      "list_id": "1"
    },
    {
      "list_id": "2"
    },
    {
      "list_id": "3"
    }
  ],
  "android_app_id": null,
  "iat": 1537694955,
  "exp": 1537702155
}

JSON数组周围的方括号({})导致在客户端响应中解析该数组时出现问题。我只需要有一个简单的数组,例如(1、2、3)。

该数组由数据库查询结果(PHP)生成,然后使用SLIM3操作$this->response->withJson

$query = "SELECT list_id FROM permissions WHERE user_id='$user_id'";
$sth = $this->dbconnection->prepare($query);
$sth->execute();
$result_permissions = $sth->fetchAll();
return $result_permissions;

我真的很难将数据库结果转换为普通的JSON数组,因为PHP仅知道关联数组(数字或带键的数组),这会导致格式错误的json数组。

json输出返回到服务器。使用SLIM3 Framework,我像这样访问JSON数据和权限数组: $user_permissions = $decoded_response['user_permissions']; 现在,我尝试使用$user_permissions[list'id][0]获取列表ID,使用print_r命令给出1。

我接下来要做的是使用带有IN Operator的数据库查询来检查permit_id。因此,我需要产生一个类似(1、2、3)的数组。.我现在陷入困境,因为我不知道如何从JSON产生这样的数组。

对我来说,最简单的方法是在数据库查询后直接生成这样的数组,并在开始时将其添加到JSON中,但是我不知道如何实现。

有任何提示吗?

2 个答案:

答案 0 :(得分:1)

如果我了解您需要实现的目标,则可以使用array_column php函数来获取list_ids数组 http://php.net/manual/en/function.array-column.php

$json = '{
    "user_id": "1",
    "username": "testuser1",
    "user_permissions": [
        {
            "list_id": "1"
        },
        {
            "list_id": "2"
        },
        {
            "list_id": "3"
        }
    ],
    "android_app_id": null,
    "iat": 1537694955,
    "exp": 1537702155
    }
';

$arrayFromJson = json_decode($json, true);

$ids = array_column($arrayFromJson['user_permissions'], 'list_id');

print_r($ids);

print_r的输出将为

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

要获取类似(1,2,3)的字符串,可以使用php implode函数 https://secure.php.net/manual/en/function.implode.php

$inString= "(" . implode(",", $ids) . ")";

您将获得如下字符串:(1,2,3)

请记住,直接在SQL查询中使用变量会导致SQL注入漏洞

答案 1 :(得分:0)

对于有相同问题的任何人,这是我制作数组的步骤:

sink("output.txt")
print(mylist)
sink()

如果您对该字符串进行json_encode编码,则会导致此错误: $query = "SELECT list_id FROM permissions WHERE user_id='$user_id'"; $sth = $this->dbconnection->prepare($query); $sth->execute(); $result_permissions; for ($i = 0; $i < $sth->rowCount(); $i++) { if ($i == $sth->rowCount() - 1) { $result = $sth->fetchColumn(); $result_permissions .= $result; } else { $result = $sth->fetchColumn(); $result_permissions .= $result . ","; } } return explode(',', $result_permissions); 是我所需要的。