Heim >Backend-Entwicklung >PHP-Tutorial >Suchen Sie in der Abteilungsliste nach der Anzahl aller Mitarbeiter unter jeder Abteilung. Beim rekursiven Aufruf besteht das Problem wiederholter Arrays

Suchen Sie in der Abteilungsliste nach der Anzahl aller Mitarbeiter unter jeder Abteilung. Beim rekursiven Aufruf besteht das Problem wiederholter Arrays

WBOY
WBOYOriginal
2016-08-18 09:15:511144Durchsuche

Frage:
Der Code lautet wie folgt:

<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>

Ergebnisausgabe:
Suchen Sie in der Abteilungsliste nach der Anzahl aller Mitarbeiter unter jeder Abteilung. Beim rekursiven Aufruf besteht das Problem wiederholter Arrays

Wenn es Abteilungen in der Liste gibt, werden diese für immer wiederholt.
Das Ergebnis, das ich brauche, besteht darin, bei jedem Aufruf die IDs aller Unterabteilungen der aktuellen Abteilung abzurufen und sie in Form eines eindimensionalen Arrays anzuzeigen.
Lassen Sie $GLOBALS['temp']=[] los, um nur eine Ebene zu finden.

Antwortinhalt:

Frage:
Der Code lautet wie folgt:

<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>

Ergebnisausgabe:
Suchen Sie in der Abteilungsliste nach der Anzahl aller Mitarbeiter unter jeder Abteilung. Beim rekursiven Aufruf besteht das Problem wiederholter Arrays

Wenn es Abteilungen in der Liste gibt, werden diese für immer wiederholt.
Das Ergebnis, das ich brauche, besteht darin, bei jedem Aufruf die IDs aller Unterabteilungen der aktuellen Abteilung abzurufen und sie in Form eines eindimensionalen Arrays anzuzeigen.
Lassen Sie $GLOBALS['temp']=[] los, um nur eine Ebene zu finden.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn