Heim  >  Artikel  >  Backend-Entwicklung  >  CMSPRESS realisiert unbegrenzte Klassifizierung (mit Code)

CMSPRESS realisiert unbegrenzte Klassifizierung (mit Code)

php中世界最好的语言
php中世界最好的语言Original
2018-05-17 11:59:111615Durchsuche

Dieses Mal bringe ich Ihnen CMSPRESS, um eine unendliche Klassifizierung zu erreichen (mit Code). Was sind die Vorsichtsmaßnahmen für CMSPRESS, um eine unendliche Klassifizierung zu implementieren?

SuperUnendliche Klassifizierung Einfach und effizient zu verwenden, der Kerncode umfasst weniger als 10 Zeilen
Außerdem möchte ich die Mängel dieser Klassifizierung herausfinden und sie effizienter gestalten und einfache unendliche Klassifizierungsmethode^_^

Der Kerncode lautet wie folgt

class Tool {
  static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空
  /**
   * 无限级分类
   * @access public 
   * @param Array $data   //数据库里获取的结果集 
   * @param Int $pid       
   * @param Int $count    //第几级分类
   * @return Array $treeList  
   */
  static public function tree(&$data,$pid = 0,$count = 1) {
    foreach ($data as $key => $value){
      if($value['Pid']==$pid){
        $value['Count'] = $count;
        self::$treeList []=$value;
        unset($data[$key]);
        self::tree($data,$value['Id'],$count+1);
      } 
    }
    return self::$treeList ;
  }  
}

$treeList[] Das Speichern des Sortierergebnisses besteht im Wesentlichen darin, es einmal zu sortieren und zu speichern und es dann zu löschen($data[ $key]); weil es nicht mehr verwendet werden kann
&$data verwendet die Parameterübergabe nach Adresse, kombiniert mit unset($data[$key]); um die Anzahl der Schleifen zu reduzieren, was die Effizienz um ein Vielfaches verbessert,

aber die Pid muss nach ASC sortiert werden, sonst ist die Anzeige unvollständig.

$value['Count'] = $count; generiert nach Ebene in der Vorlage

Die Datenstruktur vor und nach der Sortierung ist wie folgt

Felder Id und Pid, ​​die von der Tabelle benötigt werden
Datenstruktur vor der Sortierung
id pid
1   0
2   0
3   1
4   3

Sortierte Datenstruktur

id pid count
1 0 1
3 1 2
4 3 3
2 0 1

//默认列表
  public function index() {  
    $menu = M('Menu');
    $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select();
    $this->assign('List',Tool::tree($list));  
         $this->display();
  }

Rufen Sie

<td style="
text-indent
:<{$vo[&#39;Count&#39;]*20}>px;"><neq name="vo.Count" value="1">| -- </neq><{$vo.Name}></td>

im Controller auf

und verwenden Sie die Vorlage zur normalen Ausgabe und Änderung der Felder, die zum Generieren der Baumstruktur erforderlich sind

Testen Sie, ob es für 3000 Elemente 0,5 Sekunden dauert. Für 1000 Elemente dauert es etwa 0,02 Sekunden Wenn es 3000 übersteigt, wird es stark reduziert. Die Effizienz von etwa 2000 Elementen ist ohne detailliertere Tests immer noch relativ hoch.

Ich glaube, Sie haben es gemeistert, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte achten Sie darauf zu anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Verwendung von PHP Delayed Static Binding

Detaillierte Erläuterung des Prinzips und der Verwendung des automatischen Ausfüllens des thinkPHP-Frameworks

Das obige ist der detaillierte Inhalt vonCMSPRESS realisiert unbegrenzte Klassifizierung (mit Code). 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