删除while循环中的最后一个逗号 - PHP

时间:2014-09-05 00:30:57

标签: php mysql json

我一直在构建一个管理数据集的小工具,我正在尝试创建一个JSON输出,以便为我的前端数据提供服务。

现在我在循环的每一行末尾都有一个额外的逗号。我需要删除它,如果我能在while循环中找到一种方法,那将是理想的。

这是我的代码:

$sth = mysql_query("SELECT * FROM mapdata");
$num_rows = mysql_num_rows($sth);
$counter = 0;
echo '[';
while($r = mysql_fetch_assoc($sth)) {
    if (++$counter == $num_rows) {
        echo json_encode($r) . '';
    }
    else {
        echo json_encode($r) . ',';
    }
}
echo "]";
mysql_close($connection);

这就是我现在要归还的内容

[
{"col1":"123","col2":"456","col3":"789",},
{"col1":"123","col2":"456","col3":"789",}
]

这就是我需要的。

[
{"col1":"data1","col2":"data2","col3":"data3"},
{"col1":"data1","col2":"data2","col3":"data3"}
]

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:6)

您的整个方法都是错误的,您不应该尝试手动创建JSON。将所有行放在一个数组中,让json_encode()为您完成所有操作。

$result = array();
while ($r = mysql_fetch_assoc($sth)) {
    $result[] = $r;
}
echo json_encode($result);

答案 1 :(得分:0)

我喜欢尽可能遵循最佳实践,但在这个特殊情况下,由于我有一些环境限制,我需要偏离最佳实践。我以为我会分享我最终使用的解决方案,无论它过于复杂。

$sth = mysql_query("SELECT name,address,address2,city,state,postal,phone,lat,lng FROM mapdata");
$num_rows = mysql_num_rows($sth);
$counter = 0;
echo '[';
while($r = mysql_fetch_assoc($sth)) {
    if (++$counter == $num_rows) {
        echo preg_replace("/^,/",'',str_replace(',}','}',json_encode($r)));

    }
    else {
        echo preg_replace("/^,/",'',str_replace(',}','}',json_encode($r)) . ',');
    }
}
echo "]";
mysql_close($connection);