【问题标题】:Help trying to generate tricky multidimensional array format帮助尝试生成棘手的多维数组格式
【发布时间】:2010-10-05 09:59:57
【问题描述】:

我在尝试在 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}]
    ]
  }
]

任何关于这方面的建议都会很棒!

【问题讨论】:

  • 和你的previous question有区别吗?
  • 稍微 - 尝试在循环中正确构建数组结构,ITroubs 已在我的代码中解决了该问题

标签: php arrays json multidimensional-array


【解决方案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) );

上述方法是通用的。只需解码并转储结构。然后组装您的代码以创建此结构并进行编码。

【讨论】:

  • 呜呜。完全超越了我的头脑=(
  • 是的 - json_decode 将生成正确的 PHP 结构 :) 我喜欢它
【解决方案2】:

这样做:

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

【讨论】:

    【解决方案3】:

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

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

    了解 JSON 对象在 PHP 中由关联数组表示很重要(当json_encode()'ing、json_decode() 具有特定参数以使用stdClass 或关联数组时)。 所以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))
    );
    

    【讨论】:

    • 只有将 json_decode 的第二个参数设置为 TRUE 时,JSON 对象才会表示为关联数组。否则它们是 StdClass 对象。您的意思是,PHP 中的关联数组被编码为 JSON 对象。除了那个小小的挑剔,+1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多