帮助尝试生成棘手的多维数组格式

时间:2010-10-05 09:59:57

标签: php arrays json multidimensional-array

我在尝试使用PHP构建数组时遇到问题,该数组将以我正在寻找的JSON格式输出。我将向您展示我想要达到的目标以及到目前为止我所处的位置:

[
    {"data":[{"x":3,"y":0},{"x":10,"y":0}]},
    {"data":[{"x":11,"y":0},{"x":13,"y":0}]},
    {"data":[{"x":12,"y":1},{"x":17,"y":1}]}
]

我循环遍历db结果并尝试构建数组以输出上面的json,我的php看起来像这样(显然还不对):

//build the data
                    $data = array(
                                array(
                                    'x' => $age_start, 
                                    'y' => $ill_type
                                ),
                                array(
                                    'x' => $age_end, 
                                    'y' => $ill_type
                                )
                            );

                    $illnesses[] = $data;  

此代码输出以下json:

[
   {
     [
        [{"x":2,"y":6},{"x":2,"y":6}],
        [{"x":2,"y":6},{"x":5,"y":6}],
        [{"x":4,"y":6},{"x":4,"y":6}]
    ]
  }
]

关于此的任何指示都会很棒!

3 个答案:

答案 0 :(得分:1)

这样做:

$data['data'] = array(
        array(
                'x' => $age_start,
                'y' => $ill_type
        ),
        array(
                'x' => $age_end,
                'y' => $ill_type
        )
);

答案 1 :(得分:1)

基本上,如果你已经知道了你想要的JSON输出,你可以简单地json_decode来获得它在PHP中的表示。 var_export函数以可解析的格式打印结构。您也可以使用print_rvar_dump转储结构。

$json = <<< JSON
[
    {"data":[{"x":3,"y":0},{"x":10,"y":0}]},
    {"data":[{"x":11,"y":0},{"x":13,"y":0}]},
    {"data":[{"x":12,"y":1},{"x":17,"y":1}]}
]
JSON;

var_export( json_decode($json) );

上述方法具有普遍性。只需解码并转储结构。然后汇编代码以创建此结构并进行编码。

答案 2 :(得分:1)

查看JSON字符串,您可以看到:

  • 它是一个数组(它被[]包围)
  • 每个元素都是一个对象(由{}包围)
  • 对象有一个元素data,它本身就是一个数组
  • 该数组由两个具有xy属性
  • 的对象组成

重要的是要知道JSON对象在PHP中由关联数组表示(当json_encode()时,json_decode()有一个特定的参数来使用stdClass或者assoc.array)。
所以php结构看起来像这样:

$data = array(
  array('data' => array(array('x' => 3, 'y' => 0), array('x' => 10, 'y' => 0))
  ,array('data' => array(array('x' => 11, 'y' => 0), array('x' => 13, 'y' => 0))
  ,array('data' => array(array('x' => 12, 'y' => 1), array('x' => 17, 'y' => 1))
);