我在数组中有层次结构,如下所示:
item root 1
- item child 1
-- item child 2
item root 2
- item child
我想得到:
1. item root 1
1-1. item child 1
1-1-1. item child 2
2. item root 2
2-1. item child
我的构建树的功能
function printTree($data, $level = 0, $counter = 1) {
foreach ($data as $item) {
if ($item['parent_id'] == 0) {
$addr = $counter . '. ' . $item['address'];
$counter++;
}
else if ($item['parent_id'] != 0) {
$addr = $counter . '-' . $counter . ' ' . $item['address'];
} else {
$addr = $item['address'];
}
global $result;
$result['aaData'][] = Array(
$addr,
$item['mask'],
$item['status'],
$item['subnets'],
$item['therange'] = $item['start'] . ' - ' . $item['end'],
$item['type'],
$item['node'],
$item['id'],
);
if (isset($item['children'])) {
printTree($item['children'], $level + 1, $counter + 1);
}
}
return $result;
}
但我的结果不正确,root的元素计数正常,但是孩子错了,我该如何解决这个问题?需要帮助,谢谢!
答案 0 :(得分:0)
以下是一些代码,包含您的特定测试用例:
编辑(使用$ counter更正,而不是ID)
function makeTree($data, $pre='') {
$result = array();
$counter = 1;
if (is_array($data)) foreach ($data as $item) {
$result[] = $pre.$counter.' '.$item['address'];
if (isset($item['children']) && is_array($item['children'])) {
$result = array_merge($result, makeTree($item['children'], $pre.$counter.'-'));
}
$counter++;
}
return $result;
}
$data = array(
array(
'id' => 1,
'address' => 'addy 1',
'children' => array(
array(
'id' => 1,
'address' => 'addy 1.1',
'children' => array(
array(
'id' => 1,
'address' => 'addy 1.1.1',
),
),
),
),
),
array(
'id' => 2,
'address' => 'addy 2',
'children' => array(
array(
'id' => 1,
'address' => 'addy 2.1'
),
),
)
);
$out_array = makeTree($data);
print_r($out_array);
这只是一个执行非常类似任务的基本递归函数。这不是完整的解决方案。把你的特定逻辑放在那里,以创建你需要的最终输出,但你要求的基本“反”的想法是有用的。
希望这有帮助。