【问题标题】:Creating multi-dimensional array from DB从 DB 创建多维数组
【发布时间】:2011-01-18 16:28:02
【问题描述】:

我真的希望有人可以帮助我解决这个问题。我已经为此苦苦挣扎了将近两天...

我有一个 DB 表“设备”和一个表“连接”。我正在使用它来可视化我公司的网络。要将数据传递给我用来可视化数据的 JS 框架,我需要一个这样的数组:

Array
(
    [id] => 1
    [name] => TestPC1
    [children] => Array
        (
            [0] => Array
                (
                    [id] => 2
                    [name] => Testhub 2
                    [data] => Array
                        (
                        )

                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 3
                                    [name] => Rack3
                                    [data] => Array
                                        (
                                        )

                                    [children] => Array
                                        (
                                        )

                                )

                            [1] => Array
                                (
                                    [id] => 4
                                    [name] => Rack4
                                    [data] => Array
                                        (
                                        )

                                    [children] => Array
                                        (
                                        )

                                )

                        )

                )

        )

)

设备表如下所示:

A     |     B
-------------------
1     |     2
2     |     3
2     |     4

此示例的可视化如下所示:

http://img34.imageshack.us/img34/4230/netmd.jpg

有人知道如何从 db-data 获取到这个数组吗?

谢谢。

【问题讨论】:

    标签: php mysql database multidimensional-array


    【解决方案1】:

    假设您想在 PHP 中使用该表执行此操作,例如,为了在给定表和我想象的 ID->名称之间的 JOIN 之后,我将使用一个数组来表示返回的数据库数据映射表:

    $links = array(
        array('A' => 1, 'AName' => 'TestPC1', 'B' => 2, 'BName' => 'TestHub2'),
        array('A' => 2, 'AName' => 'TestHub2', 'B' => 3, 'BName' => 'Rack3'),
        array('A' => 2, 'AName' => 'TestHub2', 'B' => 4, 'BName' => 'Rack4')
    );
    
    $elements = array();
    
    // Build the tree
    foreach ($links as $link) {
        if (!isset($elements[$link['A']])) {
            $elements[$link['A']] = array(
                'id' => $link['A'], 'name' => $link['AName'], 
                'data' => array(), 'children' => array()
            );
        }
        if (!isset($elements[$link['B']])) {
            $elements[$link['B']] = array(
                'id' => $link['B'], 'name' => $link['BName'], 
                'data' => array(), 'children' => array()
            );
        } 
        $elements[$link['A']]['children'][$link['B']] = &$elements[$link['B']]; 
    }
    
    // Patch up the indices to start from 0
    foreach ($elements as &$element) {
        $element['children'] = array_values($element['children']);
    }
    
    $elements = array_values($elements);
    

    就我个人而言,我不会费心修补索引,如果你不这样做,它会让以后通过 ID 搜索条目变得更容易。

    输入您的父/子数据时要小心,否则您会得到一个可爱的循环引用。

    您当然需要用合适的 db 命令替换对 $links 的引用,该命令会生成一个数组(mysql_fetch_array 等)。

    【讨论】:

    • 你是神。非常感谢!
    【解决方案2】:

    我建议您浏览(本网站和一般互联网)“如何在 RDBMS 中表示树”。

    开始here,也许吧。

    根据您必须管理的“树”数量以及层次结构的最大深度,不同的方法或多或少是可行的。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多