从同一个表中的行对象创建数组:: PHP + SQL

时间:2015-09-18 20:46:00

标签: php mysql sql arrays

我有一个像这样的数组

id | userID | item
1  ! 1      | {"property": 0, "property": "string"}
2  ! 1      | {"property": 4, "property": "string2"}

我希望像这样返回一个数组:

[{
    "property": 0, 
    "property": "string"
}, 
{
    "property": 4,
    "property": "string2"
}]

无论我尝试什么,我似乎无法让它正常工作。要么我得到一个完整的字符串,所以数字值被转换,或者我得到一个带有“到处”的对象。目前我有这个代码

if ($query = $mysqli->query("SELECT item FROM userItems WHERE userID = 'id' "))
{
    while ($row = $query->fetch_object())
    {
        $result->items[count($result)] = $row;
    }
}

$test = stripslashes(json_encode($result->items));

返回此...

{"1":{"item":"{"property":"0","property":"string"}"}}

试图解决它几个小时但无法正确

1 个答案:

答案 0 :(得分:1)

我尝试了你的代码,主要有两个方面:

  1. 您正在构建一个关联数组数组,但关联数组往往会在代码中用后者覆盖相同的关联键 - 在您的情况下,两个键都是property

  2. 您从DB(userItems.item)检索的数据似乎已经过JSON编码,因此您需要在某处调用json_decode(),而不是再次调用json_encode();解码您的$row->item$result->items[count($result)] = json_decode($row->item);)似乎可以解决问题。

  3. 作为旁注,您应该考虑将SQL查询中的id参数包装到mysqli_real_escape_string()左右。

    如果有帮助,请告诉我,您现在可以看到所需的结果。