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

时间:2014-07-01 23:29:54

标签: php json pdo

我有以下代码:

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:""}];

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

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

谢谢

3 个答案:

答案 0 :(得分:5)

你应该消除所有关于阅读列元数据的无意义。你最终得到的是一系列物体。所以你可以简化这个:

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

此处,$row_obj将是一个对象,其列名用于存储关联值的属性。

答案 1 :(得分:3)

我认为应该这样做:

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).";";

答案 2 :(得分:0)

你可以使用数组union运算符,根据这里的文档: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).";";