【问题标题】:How to create this Multidimensional Array with this query (That eventually turns into JSON)如何用这个查询创建这个多维数组(最终变成 JSON)
【发布时间】:2013-05-01 21:31:33
【问题描述】:

我已经完成了我的研究。但是两天后我要疯了。我真的想避免向 MYSQL 发送多个查询。我知道解决方案是迭代并在新数组中插入值。但老实说,我不知道从哪里开始。我想创建的这个多维数组超出了我的范围。 谢谢!

我需要转以下MYSQL Result:

    categories  subcategories   items
    ----------  -------------   ------
    ART       painter        picasso
    ART       painter        VanGogh
    ART       sculpture      Rodin
    ART       sculpture      Serra
    MUSIC     Rock           Lennon
    MUSIC     Rock           Mercury
    MUSIC     Classic        Mozart
    THEATRE   Drama          Shakespeare
    THEATRE   Drama          Moliere

进入这个 PHP 数组:

 $Data = array (
    name=>'ARTISTS', 
    children=>array(
        array('name'=>'ART', 
                children=>array(
        array('name'=>'Painting', children=>array(array('name'=>'picasso'),array('name'=>'Van Gogh'))),
        array('name'=>'Sculpture', children=>array(array('name'=>'Rodin'),array('name'=>'Serra')))
        )),
        array('name'=>'MUSIC', 
                children=>array(
        array('name'=>'Rock', children=>array(array('name'=>'Lennon'),array('name'=>'Mercury'))),
        array('name'=>'Classic', children=>array(array('name'=>'Mozart')))
        )),
        array('name'=>'THEATRE', 
                children=>array(
        array('name'=>'Drama', children=>array(array('name'=>'Shakespeare'),array('name'=>'Moliere')))
        ))
    )
);   

我唯一知道的是,这个 PHP 数组(手动编写)一旦通过 json_encode 传递它就会生成一个完美的 JSON。所以最后一部分不是问题。我只是把它放在这里解释这一切的去向。

$json = json_encode($Data);

生成:

{"name":"ARTISTS","children":[{"name":"ART","children":[{"name":"Painting","children":[{"name":"picasso"},{"name":"Van Gogh"}]},{"name":"Sculpture","children":[{"name":"Rodin"},{"name":"Serra"}]}]},{"name":"MUSIC","children":[{"name":"Rock","children":[{"name":"Lennon"},{"name":"Mercury"}]},{"name":"Classic","children":[{"name":"Mozart"}]}]},{"name":"THEATRE","children":[{"name":"Drama","children":[{"name":"Shakespeare"},{"name":"Moliere"}]}]}]}

【问题讨论】:

  • 我不确定你为什么需要 json 中的 'children' 字段......它看起来有点笨重。但是说了又做了,你已经拥有了什么,它是如何不起作用的?
  • 我需要这样的原因:bl.ocks.org/mbostock/4063550
  • 我确实有结构,但我不知道该怎么做,就是将我的 MYSQL 结果转换为那个 PHP 数组。

标签: php mysql arrays json multidimensional-array


【解决方案1】:

我会放弃应用所有那些不必要的 namechildren 标签的想法。当你得到你的数据库结果集时,只需遍历它并直接设置所有数组索引项。

$data = array();
while ($row = /*  your DB row fetch here */) {
    $data[$row['categories']][$row['subcategories']][] = $row[$items];
}

$json_data = json_encode($data);

【讨论】:

  • 我知道这是不必要的,但这是我被要求提供 jason 的格式。 ://
  • 哇,超级干净,我试过了,绝对是最好的方法,但是我正在处理需要这种特定格式来读取信息的 D3 实现:访问:bl.ocks.org/mbostock/4063550跨度>
【解决方案2】:

正如Mike Brant 所说,您应该使用类别名称作为索引。但是,如果您仍然需要一个能够提供您给出的结果的解决方案,这里有一些代码:

$formatted = array() ;

foreach($data as $part){
    if (!array_key_exists($part['categories'], $formatted)){
        $formatted[$part['categories']] = array(
            "name" => $part['categories'],
            "children" => array()
        );
    }

    $sub = &$formatted[$part['categories']]['children'] ;

    if (!array_key_exists($part['subcategories'], $sub)){
        $sub["name"] = $part['subcategories'] ;
        $sub["children"] = array() ;
    }

    $items = &$sub['children'] ;

    $items[$part['items']] = array("name"=>$part['items']) ;
}

print_r($formatted);

【讨论】:

  • 谢谢你,它仍然不是 JSON 数组(方括号),而是以不同的格式嵌套。我想要实现的输出是针对需要这种特定格式的 D3 实现:bl.ocks.org/mbostock/4063550 再次感谢!
猜你喜欢
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
相关资源
最近更新 更多