<?php
$arr = [
['id' => 1, 'parent_id' => 0, 'name' => 'root'],
['id' => 2, 'parent_id' => 1, 'name' => 'child_1'],
['id' => 3, 'parent_id' => 2, 'name' => 'child_1.1'],
['id' => 4, 'parent_id' => 2, 'name' => 'child_1.2'],
['id' => 5, 'parent_id' => 1, 'name' => 'child_2'],
['id' => 6, 'parent_id' => 5, 'name' => 'child_2.1'],
['id' => 7, 'parent_id' => 5, 'name' => 'child_2.2'],
['id' => 8, 'parent_id' => 2, 'name' => 'child_1.3'],
];
$initRight = 0;
$depth = 0;
$data = [];
foreach ($arr as $key => $val) {
if (count($data) > 0) {
$ids = array_column($data, 'id');
$index = array_search($val['parent_id'], $ids);
$right = $data[$index]['right'];
$depth = $data[$index]['depth'];
//$data = update($data, $right);
foreach ($data as $k => $v) {
if ($v['left'] > $right) {
$data[$k]['left'] += 2;
}
if ($v['right'] >= $right) {
$data[$k]['right'] += 2;
}
}
$data[] = [
'id' => $val['id'],
'parent_id' => $val['parent_id'],
'name' => $val['name'],
'left' => $right,
'right' => $right + 1,
'depth' => $depth + 1
];
} else {
//初始化
$data[] = [
'id' => $val['id'],
'parent_id' => $val['parent_id'],
'name' => $val['name'],
'left' => $initRight + 1,
'right' => $left + 2,
'depth' => $depth
];
}
}
function update($data, $right){
foreach ($data as $key => $val) {
if ($val['left'] > $right) {
$data[$key]['left'] += 2;
}
if ($val['right'] >= $right) {
$data[$key]['right'] += 2;
}
}
return $data;
}
?>
发表评论: