我在PHP中有一个数据结构,使用Telnet连接到交换机,如下所示:
Array
(
[172.1.1.2] => Array
(
[0] => Array
(
[IP] => 172.1.1.1
[PlatformBrand] => dlink
)
[1] => Array
(
[IP] => 172.1.1.5
[PlatformBrand] => dlink
)
[2] => Array
(
[IP] => 172.1.1.7
[PlatformBrand] => dlink
)
[3] => Array
(
[IP] => 172.1.1.8
[PlatformBrand] => dlink
)
)
[172.1.1.6] => Array
(
[0] => Array
(
[IP] => 172.1.1.10
[PlatformBrand] => dlink
)
)
[172.1.1.7] => Array
(
[0] => Array
(
[IP] => 172.1.1.11
[PlatformBrand] => dlink
)
[1] => Array
(
[IP] => 172.1.1.14
[PlatformBrand] => dlink
)
)
)
但是我希望将其转换为像这样的结构树:
CREATE TABLE `network_equipment_class` (
`id` int(11) NOT NULL,
`ip` varchar(15) NOT NULL,
`parent` int(11) NOT NULL,
`sort` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
id | ip | parent | sort
--------------------------------
1 | 172.1.1.2 | 0 | 0
2 | 172.1.1.1 | 1 | 0
3 | 172.1.1.5 | 1 | 1
4 | 172.1.1.7 | 1 | 2
5 | 172.1.1.8 | 1 | 3
6 | 172.1.1.6 | 0 | 1
7 | 172.1.1.10 | 6 | 0
8 | 172.1.1.11 | 4 | 0
9 | 172.1.1.14 | 4 | 1
for PHP> = 5.3来编写函数代码,任何想法或任何建议?
更新 这是我的书面代码,但不能使用:
function createDBTree($IP, $dbTree){
if (!is_array($dbTree) || $dbTree == array()) {
$dbTree = array('ip' => $IP);
} else {
foreach ($dbTree as $dbkey => $tmpdbvalue) {
if(is_array($tmpdbvalue) && $arr !== array()) {
if (!isset($tmpdbvalue['children'])) $dbTree = $this->createDBTree($IP, $tmpdbvalue['children']);
} else {
if ($tmpdbvalue['ip'] == $IP) $tmpdbvalue['children'] = array('ip' => $IP);
}
}
}
return $dbTree;
}
最后,我将完成结构:
172.1.1.2 => 172.1.1.1
=> 172.1.1.5
=> 172.1.1.7 => 172.1.1.11 => ... => ...
=> 172.1.1.14
=> ...
=> 172.1.1.8
=> ...
172.1.1.6 => 172.1.1.10
=> ...
...
答案 0 :(得分:0)
使用它。
$arr = array('172.1.1.2' => array(
array('IP' => '172.1.1.1','PlatformBrand' => 'dlink'),
array('IP' => '172.1.1.5','PlatformBrand' => 'dlink'),
array('IP' => '172.1.1.7','PlatformBrand' => 'dlink'),
array('IP' => '172.1.1.8','PlatformBrand' => 'dlink')
),
'172.1.1.6' => array(
array('IP' => '172.1.1.10','PlatformBrand' => 'dlink')
),
'172.1.1.7' => array(
array('IP' => '172.1.1.11','PlatformBrand' => 'dlink'),
array('IP' => '172.1.1.14','PlatformBrand' => 'dlink')
),
);
$sn = $parent = $sort = 0;
$hdr = "id | ip | parent | sort\r\n";
$hdr .= "--------------------------------\r\n";
foreach($arr as $k => $v){
$sn++;
$hdr .= "$sn | $k | $parent | $sort \r\n";
$parent = $sn;
foreach($v as $t => $d){
$sn++;
$hdr .= "$sn | {$d['IP']} | $parent | $sort \r\n";
$sort++;
}
$parent = 0;
$sort = 0;
}
echo nl2br($hdr);
请记住,问题中的数组是输出,因此在迭代之前必须将其重新格式化为PHP数组。
当然,如果您要写入数据库,则不需要换行符"\n\r"
和nl2br
。只需在循环中构建查询并执行。