从PHP中的重复记录中获取特定数据

时间:2015-04-12 13:55:41

标签: php mysql json

我只是想知道是否有可能从PHP-MySQL连接中的重复行获取特定列并将它们用于JSON中的现有数据?

/...db connection etc.

        if ($statement->execute())
        {
             $response["lecturer"] = array();

             while($row = $statement->fetch(PDO::FETCH_ASSOC))
             {
                $lecturer = array();
                $lecturer["id"] = $row["lecturerid"];
                $lecturer["image"] = $row["l_image"];
                $lecturer["degree"] = $row["degree"];
                $lecturer["name"] = $row["l_name"];
                $lecturer["surname"] = $row["surname"];
                $lecturer["field"] = array();
                $lecturer["field"]["fieldid"] = $row["fieldid"];
                $lecturer["field"]["name"] = $row["f_name"];

                array_push($response["lecturer"], $lecturer);
            }
        }
/... json_encode etc.

所以,有一种情况,一位讲师有两个不同的领域,我得到这样的东西:

{
    "lecturer": [
        {
            "id": 1,
            "image": "http://...",
            "degree": "PhD",
            "name": "John",
            "surname": "Doe",
            "field": {
                "fieldid": 13,
                "name": "field1"
            }
        },
        {
            "id": 1,
            "image": "http://...",
            "degree": "PhD",
            "name": "John",
            "surname": "Doe",
            "field": {
                "fieldid": 14,
                "name": "field2"
            }
        },

而不是那样,我想得到JSON:

{
    "lecturer": [
        {
            "id": 1,
            "image": "http://...",
            "degree": "PhD",
            "name": "John",
            "surname": "Doe",
            "field": {
                "fieldid": 13,
                "name": "field1",
                "fieldid": 14,
                "name": "field2"
            }
        },

在MySQL数据库中有两个表:讲师和字段,还有讲话者字段表,其中我有courserid和fieldid之间的关系。

1 个答案:

答案 0 :(得分:1)

正如我所指出的那样,在json对象中声明类似的命名字段是不可能的:

"field": {
    "fieldid": 13,
    "name": "field1",
    "fieldid": 14,
    "name": "field2"
}

有效案例是

"field": [{
    "fieldid": 13,
    "name": "field1",
},
{
    "fieldid": 14,
    "name": "field2"
}]

你可以这样做:

if ($statement->execute())
{
     $indexedLecturers = array();

     while($row = $statement->fetch(PDO::FETCH_ASSOC))
     {
        $lid = $row["lecturerid"];

        if (isset($indexedLecturers[$lid])) {
            array_push($indexedLecturers[$lid]["field"], array(
                "fieldid" => $row["fieldid"],
                "name" => $row["f_name"],
            ));
        } else {
            $lecturer = array();
            $lecturer["id"] = $lid;
            $lecturer["image"] = $row["l_image"];
            $lecturer["degree"] = $row["degree"];
            $lecturer["name"] = $row["l_name"];
            $lecturer["surname"] = $row["surname"];
            $lecturer["field"] = array();

            array_push($lecturer["field"], array(
                "fieldid" => $row["fieldid"],
                "name" => $row["f_name"],
            ));

            $indexedLecturers[$lid] = $lecturer;
        }
    }

    $response['lecturer'] = array_values($indexedLecturers);
}