// 函数:递归更新 areaLevel
public function AreaLevel() {
$data = Db::name("lipin_areas")->select()->toArray();
$data=$this->buildTree($data);
$this->updateAreaLevel($data); // 递归处理子项
$newdata = $this->flattenTree($data); // 将树形结构展开为平tenTree
foreach ($newdata as $item) {
Db::name("lipin_areas")->where('id', '=', $item['id'])->update(['areaLevel' => $item['areaLevel']]);
}
var_export($data);
}
public function updateAreaLevel(&$data, $level = 1) {
foreach ($data as &$item) {
$item['areaLevel'] = (string)$level; // 更新 areaLevel 字段为字符串类型
if (isset($item['children']) && is_array($item['children'])) {
$this->updateAreaLevel($item['children'], $level + 1); // 递归处理子项
}
}
}
// 构建树形结构的递归函数
public function buildTree(array &$elements, $parentId = null) {
$branch = [];
foreach ($elements as &$element) {
if ($element['parentId'] == $parentId) {
$children = $this->buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
// 将树形结构展开为平坦数组的递归函数
public function flattenTree(array $tree) {
$flatArray = [];
foreach ($tree as $node) {
$flatArray[] = [
'id' => $node['id'],
'parentId' => $node['parentId'],
'name' => $node['name'],
'areaLevel' => $node['areaLevel'],
];
if (isset($node['children'])) {
$flatArray = array_merge($flatArray, $this->flattenTree($node['children']));
}
}
return $flatArray;
}
发表评论 取消回复