Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen Sie eine Infinitus-Klassifizierungsbaumstruktur

So erstellen Sie eine Infinitus-Klassifizierungsbaumstruktur

小云云
小云云Original
2018-02-12 13:17:051838Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich eine einfache Methode zum Erstellen einer Infinitus-Klassifizierungsbaumstruktur vor. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen. Ich hoffe, es kann allen helfen.

Zuerst die Darstellungen

Die Klassifizierung der obersten Ebene ist eigentlich die Klassifizierung der ersten Ebene, und die Klassifizierung der zweiten Ebene wird auch als Klassifizierung bezeichnet Unterkategorie der Klassifikation der ersten Ebene. Auf dieser Basis können Unterkategorien auch Unterkategorien haben und so eine unendliche Kategorie bilden.

Sehen wir uns den spezifischen Implementierungscode an:

1 Abfrage nach Feld im Controller, um alle Klassifizierungsinformationen herauszufinden (id: der ID-Wert der Kategorie, cate_name: der Name der Kategorie, PID: übergeordnete ID, Sortierungen: Vorbereitung für die Anzeige der Titelreihenfolge, optional)

public function cate_display()
  {
    $cate = D('Cate'); 
    $field = array('id','cate_name','pid','sorts');
    $list = $cate->allCategory($field);
    $this->assign('list',$list);
    $this->display();
  }

2. Code im Modell

Erstellen Sie zwei im Modell der entsprechenden Controller-Methode

1. Fragen Sie alle Klassifizierungsinformationen ab und rufen Sie die Methode auf, um einen Klassifizierungsbaum zu generieren:

public function allCategory($field='*'){
     $data = $this->field($field)->select();
     return $this->tree($data);
   }

2. Erzeugen Sie einen Klassifizierungsbaum (verwenden Sie Rekursion, übergeben Sie Daten und die ID der übergeordneten Klasse ], Ebene [Anzahl der Ebenen, wird zur Steuerung der Anzahl der Anzeigen verwendet] zwei Variablen, der Anfangswert ist Null)

public function tree($data,$pid=0,$level=0){
    static $tree = array();
    foreach($data as $k=>$v){
      if($v['pid'] == $pid){
        $v['level'] = $level;
        $tree[]=$v;
        $this->tree($data,$v['id'],$level+1);
      }
    }
  
    return $tree;
  }

3. Der Code in der Ansichtsdatei

<p class="form-group">
        <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label>
        <p class="col-sm-6">
          <select name="pid" style="width: 100%;">
            <option selected="selected" value="0">顶级菜单</option>
            <volist name="row" id="val"> 
              <option value="{$val.id}"><?php echo str_repeat(&#39;-&#39;,$val[&#39;level&#39;]*4); ?>{$val.cate_name}
              </option> 
            </volist> 
          </select>
        </p>
      </p>

Auf diese Weise wird eine Klassifizierungsbaumstruktur vervollständigt, die unendlich rekursiv sein kann. Die Kernidee ist immer noch die rekursive Funktion im Modell. Die PID wird standardmäßig auf Null übergeben ID und Level werden zum Aufzeichnen der Anzahl der Rekursionsebenen verwendet. Wenn die Ansichtsseite angezeigt wird, wird schließlich die in PHP integrierte Funktion str_repeat () aufgerufen, um wiederholt „-“ auszugeben und den Effekt der Ebenenunterscheidung während der Ausgabe zu erzielen.

Verwandte Empfehlungen:

PHP implementiert den Infinitus-Klassifizierungsbaum ohne Rekursion

PHP Infinitus-Klassifizierung generiert die Klassifizierungsbaumimplementierung Einführung in die Methode

Eine kurze Einführung in die Infinitus-Klassifizierungsbaumstruktur

Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine Infinitus-Klassifizierungsbaumstruktur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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