>백엔드 개발 >PHP 튜토리얼 >부서 목록에서 각 부서 소속 전체 직원 수를 찾아보고, 재귀적으로 호출 시 배열이 반복되는 문제가 있음

부서 목록에서 각 부서 소속 전체 직원 수를 찾아보고, 재귀적으로 호출 시 배열이 반복되는 문제가 있음

WBOY
WBOY원래의
2016-08-18 09:15:511138검색

질문:
코드는 다음과 같습니다.

<code>  //查找所有下级部门的id
    public static function actionSon($company_id,$id)
    {   
        global $temp;
        $modelClass = self::find()
            ->where(['parent_id'=>$id,'company_id'=>$company_id]) 
            ->all();  
        if(!empty($modelClass)){
            foreach ($modelClass as $k => $value) { 
                $temp[] =$value->id;
                self::actionSon($company_id,$value->id);//调用函数,传入参数,继续查询下级
            }
        }
        return $temp;
    }
    </code>
<code>fields里面调用
    public function fields()
    {
        return [
            'id',
            'company_id'
            'user_count'=>function(){

                // return $this->getUserCount();
                $dep_ids=self::actionSon($this->company_id,$this->id);  
                // $GLOBALS['temp']=[];
               //unset($temp);
print_r($dep_ids);
              
            },
        ];
    }</code>

결과 출력:
부서 목록에서 각 부서 소속 전체 직원 수를 찾아보고, 재귀적으로 호출 시 배열이 반복되는 문제가 있음

중복된 ​​데이터를 얻었습니다. 목록에 부서가 있으면 영원히 반복됩니다. 이 문제를 해결하는 방법은 무엇입니까?
나에게 필요한 결과는 호출할 때마다 현재 부서에 속한 모든 하위 부서의 ID를 가져와서 1차원 배열 형식으로 표시하는 것입니다.
한 레벨만 찾으려면 $GLOBALS['temp']=[];를 해제하세요.

답글 내용:

질문:
코드는 다음과 같습니다.

<code>  //查找所有下级部门的id
    public static function actionSon($company_id,$id)
    {   
        global $temp;
        $modelClass = self::find()
            ->where(['parent_id'=>$id,'company_id'=>$company_id]) 
            ->all();  
        if(!empty($modelClass)){
            foreach ($modelClass as $k => $value) { 
                $temp[] =$value->id;
                self::actionSon($company_id,$value->id);//调用函数,传入参数,继续查询下级
            }
        }
        return $temp;
    }
    </code>
<code>fields里面调用
    public function fields()
    {
        return [
            'id',
            'company_id'
            'user_count'=>function(){

                // return $this->getUserCount();
                $dep_ids=self::actionSon($this->company_id,$this->id);  
                // $GLOBALS['temp']=[];
               //unset($temp);
print_r($dep_ids);
              
            },
        ];
    }</code>

결과 출력:
부서 목록에서 각 부서 소속 전체 직원 수를 찾아보고, 재귀적으로 호출 시 배열이 반복되는 문제가 있음

중복된 ​​데이터를 얻었습니다. 목록에 부서가 있으면 영원히 반복됩니다. 이 문제를 해결하는 방법은 무엇입니까?
나에게 필요한 결과는 호출할 때마다 현재 부서에 속한 모든 하위 부서의 ID를 가져와서 1차원 배열 형식으로 표시하는 것입니다.
한 레벨만 찾으려면 $GLOBALS['temp']=[];를 해제하세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.