// 函数:递归更新 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;
  }


点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部
{__SCRIPT__}