zoukankan      html  css  js  c++  java
  • 不递归的方式更新所有用户的下属ID集合

    /**
     * 批量更新xw_kefu的sonIds
     * @author jack
     */
    function kefu_update_kefuids()
    {
        set_time_limit(0);
        global $db;
        $sql = "select id,name,p_id,is_lizhi from xw_kefu where is_del=0 and is_lizhi=0 and kefu_type='o2o'";
        $result = $db->query($sql);
        $arrays = $db->fetch_array_all($result);
        $tmpArr = $arrays;
        foreach( $arrays as $key=>$row ){
            $kefuid = $row['id'];
            $son_ids = subtree($tmpArr, $kefuid);
            $son_ids = implode(',', $son_ids);
            $sql2 = "update xw_kefu set son_ids='$son_ids' where id=$kefuid";
            $db->query($sql2);
        }
    }
    
    
    /**
     * 获取下级顾问所有ID集合
     * @author jack
     */
    function subtree($arr, $pId=0)
    {
        //创建任务表
        $task = [$pId];
        // 保存子ids的数组
        $ids = [];
        //如果任务表不为空 就表示要做任务
        while(!empty($task))
        {
            //默认是没有子级
            $flag = false;
            foreach($arr as $k=>$v)
            {
                if ($v['p_id'] == $pId) {
                    $ids[] = $v['id'];
                    //借助栈 把新的地区的id压入栈
                    $task[] = $v['id'];
                    $pId = $v['id'];
                    //把找到的单元unset掉
                    unset($arr[$k]);
                    $flag = true;
                }
            }
            //表示没找到子树
            if (!$flag) {
                array_pop($task);
                $pId = end($task);
            }
        }
        return $ids;
    }
  • 相关阅读:
    Substrings(hdu 4455)
    打砖块(codevs 1257)
    AFO
    愿 你 出 走 半 生 , 归 来 仍 是 少 年
    洛谷 2691逃离
    51Nod 1021 石子归并
    洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
    codevs 2072 分配房间
    codevs 1388 砍树
    codevs 1288 埃及分数
  • 原文地址:https://www.cnblogs.com/dawuge/p/13185034.html
Copyright © 2011-2022 走看看