Maison  >  Article  >  développement back-end  >  CMSPRESS réalise un classement illimité (avec code)

CMSPRESS réalise un classement illimité (avec code)

php中世界最好的语言
php中世界最好的语言original
2018-05-17 11:59:111609parcourir

Cette fois je vous propose CMSPRESS pour réaliser une classification infinie (avec code). Quelles sont les précautions pour que CMSPRESS mette en œuvre une classification infinie Voici des cas pratiques, jetons un coup d'œil ?

SuperClassification infinie Simple et efficace à utiliser, le code de base fait moins de 10 lignes
De plus, je souhaite découvrir les lacunes de cette classification, et une plus efficace et méthode de classification infinie simple ^_^

Le code de base est le suivant

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[] Enregistrer le résultat du tri consiste essentiellement à le trier et à l'enregistrer une fois, puis à le supprimer ($ data[$key]); car il n'est plus utilisé
&$data utilise le passage de paramètres par adresse, combiné avec unset($data[$key]); .

Mais le Pid doit être trié par ASC, sinon il sera affiché Incomplet

$value['Count'] = $count; généré par niveau dans le modèle

La structure des données avant et après le tri est la suivante

Champs Id et Pid requis par la table
Structure des données avant le tri
id pid
1 0
2 0
3 1
4 3

Structure de données triées

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();
  }

Appel

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

et utilisez le modèle pour sortir normalement et modifier les champs qui doivent générer la structure arborescente comme ci-dessus

Après le test, s'il y a 3 000 éléments, cela prend 0,5 seconde pour 1 000 éléments. 0,02 secondes. S'il dépasse 3 000, l'efficacité sera considérablement réduite. L'efficacité d'environ 2 000 est encore relativement élevée. Je n'ai pas effectué de tests plus détaillés

Je pense qu'il faudra y jeter un œil. Dans le cas de cet article, vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web PHP chinois !

Lecture recommandée :

Explication détaillée de l'utilisation de la liaison statique retardée PHP

Explication détaillée des principes et de l'utilisation du remplissage automatique du framework thinkPHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn