// 函数:递归更新 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; }
发表评论 取消回复