首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从数据库创建多维数组

从数据库创建多维数组
EN

Stack Overflow用户
提问于 2010-02-19 16:06:35
回答 2查看 762关注 0票数 0

我真的希望有人能帮我解决这个问题。我已经挣扎了将近两天了……

我有一个DB表“设备”和一个表“连接”。我正在使用它来可视化我公司的网络。为了将数据传递给我用来可视化数据的JS-framework,我需要一个如下所示的数组:

代码语言:javascript
运行
复制
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
                                        (
                                        )

                                )

                        )

                )

        )

)

设备表如下所示:

代码语言:javascript
运行
复制
A     |     B
-------------------
1     |     2
2     |     3
2     |     4

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

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

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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-19 17:03:43

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

代码语言:javascript
运行
复制
$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搜索条目变得更容易。

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-02-19 16:24:56

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

也许可以启动here

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2294838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档