【问题标题】:Create dynamic object and JSON encode it创建动态对象并对其进行 JSON 编码
【发布时间】:2014-07-01 23:29:53
【问题描述】:

我有以下代码:

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

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

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

谢谢

【问题讨论】:

  • 那里有比你接受的更好的答案

标签: php json pdo


【解决方案1】:

您应该摒弃阅读列元数据的所有废话。你最终追求的是一组对象。因此,您可以将其简化为:

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

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

【讨论】:

    【解决方案2】:

    我认为应该这样做:

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

    【讨论】:

    • 我会尽快。我猜你太快了...... :)
    【解决方案3】:

    您可以使用数组联合运算符,根据此处的文档: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).";";
    

    【讨论】:

    • 您刚刚将array_push($json 更改为$json[]= 吗?这不完全一样吗?编辑:PS 我没有投反对票 - 我留下了建设性的评论,这就是想法。
    • $json[] 一样的。不过也没有投反对票
    • @Popnoodles 很好,我再次尝试使用数组联合运算符,但我太慢了
    • @r3wt 这并不是真正的问题,而是关于分配哪些数据而不是如何附加到数组。即使这是一个错误的答案,我已经修复了 -1,因为在没有评论的情况下投反对票是不对的。也许是那个人也乞求一个绿色的勾号。 #呃
    • @Popnoodles 你是如何从 OP 中得出这个结论的?在我看来,他正在获得一个多维数组并想要一个单维数组。诚然,我是一个世界级的白痴,所以我真的知道什么..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多