从PHP中的SQL结果构造一个复杂的JSON对象

时间:2014-10-18 23:55:44

标签: php mysql json

我有一个包含许多表的数据库。一个表代表产品,另一个表代表类别。一种产品可以属于许多类别。因此,当我请求我的数据库显示带有类别的产品时,我当然会检索许多行,每个产品都有多个类别。 例如,结果将是

product_name|category      |city
Test1       |cinema        |paris
Test1       |entertainment |paris
Test1       |Other         |paris
Test2       |Food          |new york
Test2       |Restaurant    |new york
Test2       |Night         |new york

我要做的是使用PHP脚本为每个产品名称创建一个JSON对象,如下所示:

    [
        {
            "product_name": "Test1",
            "categorie": [
                "cinema",
                "entertainment",
                "Other"
            ],
            "city": "paris"
        },
        {
            "product_name": "Test2",
            "categorie": [
                "Food",
                "Restaurant",
                "Night"
            ],
            "city": "new york"
        }
    ]

当我尝试使用json_encode但没有成功时,我得到了重复的行。 谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

您需要在json_encode

之前重新排序数据

如果$ rows是你的数据库的响应,你必须抛出

$data = [];
foreach($rows as $row) {
    $name = $row['product_name'];
    if(!isset($data[$name])) {
        $data[$name] = [
            'product_name' => $name,
            'city'=>$row['city'],
            'categories'=>[]
        ];
    }
    $data[$name]['categories'][] = $row['category'];
}
json_encode(array_values($data)); //this is what you want

多数民众赞成! 也许你需要while($ row = mysqli_fetch_row($ result))而不是foreach,这取决于你使用的sql查询构建器。但这个想法是一样的