【问题标题】:PHP: how to convert Php array to json formatPHP:如何将 PHP 数组转换为 json 格式
【发布时间】:2014-01-04 02:06:31
【问题描述】:

我有一组来自 mysql 查询的数据,如下所示

hub       | month | frequency 
GALAXY    | 10    | 1
GALAXY    | 11    | 2 
GALAXY    | 12    | 1 
LEVERAGES | 10    | 3 
LEVERAGES | 12    | 2 

我想使用 json_encode 将数据填充为 json 格式:

[{"name":"GALAXY","total":"4","articles":[["10","1"],["11","2"],["12","1"]]},{"name":"LEVERAGES","total":"5","articles":[["10","3"],["12","2"]]}]

但我无法获得正确的 json。以下是我的代码:

$root = array();
$aColumns = array('hub', 'month', 'frequency');
$tangos = $this->Report_Model->getMonthHubTango();


    foreach($tangos->result_array() as $aRow)
                    {
                        $row = array();
                        $total = 0;

                        foreach($aColumns as $col)
                        {
                            $row[] = $aRow[$col];
                            $total += $aRow['frequency'];
                                                    $hub = $aRow['hub'];

                        }
                        $main['name'] = $hub;
                        $main['total'] = $total;
                        $main['articles'][] = $row;                 

                    }

                    $root[] = $main;
echo json_encode($root);

有人吗?提前谢谢..

【问题讨论】:

  • 你的代码中$hub在哪里定义?
  • 看起来$main['name'] 和其他两个$main 被每一次foreach 迭代覆盖,所以你只会得到最后一次迭代结果到你的$root[]

标签: php mysql arrays json


【解决方案1】:

我认为,你应该在 foreach 块中添加$root[] = $main;,这样每个 $main 数组都会被放入 $root 矩阵中:

foreach($tangos->result_array() as $aRow)

{
    $row = array();
    $total = 0;

    foreach($aColumns as $col)
    {
        $row[] = $aRow[$col];
        $total += $aRow['frequency'];

    }
    $main['name'] = $hub;
    $main['total'] = $total;
    $main['articles'][] = $row;                 
    $root[] = $main;
}

另外,你在循环中有未定义的 $hub。所以,$main['name'] 可能是未定义的。

【讨论】:

  • 或者$root[]['name']等等。
  • @Nikolay 是的,完全摆脱 $root
【解决方案2】:
$root = array();
$tangos = $this->Report_Model->getMonthHubTango();


    foreach($tangos->result_array() as $aRow)
                    {
                        $row = array();
                        $total = 0;

                        foreach($aColumns as $col)
                        {
                            $row[] = $aRow[$col];
                            $total += $aRow['frequency'];

                        }
                        $main['name'] = $hub;
                        $main['total'] = $total;
                        $main['articles'][] = $row;                 
                        $root[] = $main;
                    }


echo json_encode($root);

【讨论】:

    【解决方案3】:

    就像上面描述的那样,但是如果你想给根一个属性,这将允许你保持你的数据有条理。使用$root['data'] = $main;。因此代码将变为:

    foreach($tangos->result_array() as $aRow){
        $row = array();
        $total = 0;
    
        foreach($aColumns as $col) {
            $row[] = $aRow[$col];
            $total += $aRow['frequency'];
            $hub = $aRow['hub'];
    
        }
        $main['name'] = $hub;
        $main['total'] = $total;
        $main['articles'][] = $row;                 
    }
    
    $root['data'] = $main;
    echo json_encode($root);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-13
      • 2014-11-25
      • 2016-09-09
      • 2015-07-02
      • 2016-07-07
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多