创建动态对象并对其进行JSON编码


Create dynamic object and JSON encode it

我有以下代码:

while ($row = $psql - > fetch()) {
    for ($i = 0; $i < $psql - > columnCount(); $i++) {
        $col = $psql - > getColumnMeta($i);
        array_push($json, array($col['name'] = > $row[$i]));
    }
}
echo "var data = ".json_encode($json).";";

产生以下输出:

var data = [{"id":"3"},{"id2":"1"},{"sec":"1"},{"cat":"1"},{"term":"Teste"},{"sTerm":""}];

但是为了导入数据,我需要输出像这样:

var data = [{id:"3",id2:"1",sec:"1",cat:"1",term:"Teste",sTerm:""}];

({...}中的每个数据都是一行。

除了手动构建字符串之外,还有什么方法可以做到这一点吗?

谢谢

您应该去掉关于读取列元数据的所有无意义的内容。你最终需要的是一个对象数组。所以你可以把它简化成这样:

while ($row_obj = $psql->fetch_object()) {
    $json[] = $row_obj;
}
echo "var data = ".json_encode($json).";";

在这里,$row_obj将是一个对象,其列名称用于存储相关值的属性。

我想这个应该可以了:

while ($row = $psql->fetch()) {
    $line = array();
    for ($i = 0; $i < $psql-> columnCount(); $i++) {
        $col = $psql-> getColumnMeta($i);
        $line[$col['name']] = $row[$i];
    }
    array_push($json,$line);
}
echo "var data = ".json_encode($json).";";

您可以使用数组联合运算符,根据这里的文档:http://www.php.net/manual/en/function.array-merge.php我还没有尝试过,但由于$json是一个数组,您应该能够以这种方式连接它。

$json = array();
while ($row = $psql - > fetch()) {
    for ($i = 0; $i < $psql - > columnCount(); $i++) {
        $col = $psql - > getColumnMeta($i);
        $json = $json + array($col['name'] = > $row[$i]));
    }
}
echo "var data = ".json_encode($json).";";