我在将数据库查询结果转换为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中,但是我不知道如何实现。
有任何提示吗?
答案 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);
是我所需要的。