猿问

这个回调有点难度!!!根据数组创建无限级分类树

public function test(){
        $data = array(
            '卧房'=>array(
                '床'=>array(
                    '单人床'=>array(
                        'ysy高级单人床'=>1,
                        'tsm高级单人床'=>9
                    ),
                    '双人床'=>array(
                        'ysy高级双人床'=>2,
                        'tsm高级双人床'=>8
                    )
                ),
                '床头柜'=>array(
                    '进口柜'=>array(
                        '法国艾莉丝高级柜'=>3,
                        '法国莱蒙高级柜'=>6,
                    ),
                    '本地柜'=>array(
                        '富贵鸟高级柜'=>4,
                        '富力新蒿亭高级柜'=>5,
                    ),
                )
            )
        );
       $result = $this->initTree($data,0,1,1);
    }
    /**
     * 自动创建分类
     * @param $data
     * @param $level
     * @param int $step
     * @param array $arr
     * @return int
     */
    protected function initTree($data,$pid,$level=1,$step=1,$arr=[])
    {
            foreach ($data as $k=>$v) {
                //查询分类表是否已有该分类
                $sql = "select id from srv_kit_category where pid=".$pid." and name='" . $k."'";
                $idObj = $this->dao->querySql($sql);
                $id = $idObj?$idObj[0]->id:0;

                //没有则插入该表,并获取插入id
                if (!$id) {
                    $insertData = array(
                        'pid' => $pid,
                        'name' => $k,
                        'level'=>$level,
                    );
                    $this->dao->insert('srv_kit_category')->data($insertData)->check('name', 'notempty')->exec();
                    if (dao::isError()) {
                       return 404;
                    }
                    $id = $this->dao->lastInsertID();//获取最后的插入id
                }

                //判断数组的值是否为空,不为空则将id赋值给level,并回调
                if (is_array($v)) {
                    $arr[$step]=$id;
                    $pid = $arr[$step];
                    $step++;
                    $level++;
                }
                $this->initTree($v, $pid,$level,$step,$arr);//回调
                $step--;
                $level--;
            }
            return 200;

    }

结果如下

双人床应该是在床下面,而我这里变成在单人床下面了
所以怎么调试刚刚的代码
数据表结构如下
https://img1.mukewang.com/5c8f42f60001b69d03680025.jpg

炎炎设计
浏览 390回答 1
1回答

墨色风雨

随时随地看视频慕课网APP
我要回答