将php数组转换为json数组并使用slim3获得响应

k10s72fa  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(523)

我在将数据库查询的结果转换为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框架访问json数据和权限数组,如下所示: $user_permissions = $decoded_response['user_permissions']; 现在我试着用 $user_permissions[list'id][0] 这给了我 print_r 命令。
接下来我要做的是使用带有in操作符的数据库查询来检查权限id。因此,我需要生成一个数组,如(1,2,3)。。我现在被卡住了,因为我不知道如何从json生成这样的数组。。
对我来说,最简单的方法是在数据库查询之后直接生成这样一个数组,并在开始时将其添加到json中,但我不知道如何实现这一点。
有什么提示吗?

qgzx9mmu

qgzx9mmu1#

对于有相同问题的人,以下是我制作数组的步骤:

$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);

如果对该字符串进行json编码,将导致: {user_permissions":["1","2","3"]} 这正是我需要的。

insrf1ej

insrf1ej2#

如果我了解你需要达到的目标,你可以使用 array_column php函数获取列表id的数组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注入漏洞

相关问题