我真的希望有人能帮我解决这个问题。我已经挣扎了将近两天了……
我有一个DB表“设备”和一个表“连接”。我正在使用它来可视化我公司的网络。为了将数据传递给我用来可视化数据的JS-framework,我需要一个如下所示的数组:
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到这个数组?
谢谢。
发布于 2010-02-19 17:03:43
假设您希望在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搜索条目变得更容易。
在输入父/子数据时要小心,否则会得到一个可爱的循环引用。
当然,您需要用生成数组(mysql_fetch_array等)的合适的db命令替换对$links的引用。
发布于 2010-02-19 16:24:56
https://stackoverflow.com/questions/2294838
复制相似问题