ホームページ  >  記事  >  バックエンド開発  >  CMSPRESSは無制限の分類を実現(コードあり)

CMSPRESSは無制限の分類を実現(コードあり)

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-17 11:59:111638ブラウズ

今回は、無限分類を実現するための CMSPRESS について説明します (コード付き)。CMSPRESS が無限分類を実装するための 注意事項 は何ですか? ここで実際のケースを見てみましょう。

無限分類 使いやすく、非常に効率的なコアコードは 10 行未満です さらに、この分類の欠点と、より効率的でシンプルな無限分類方法を見つけたいです^_^

コアコードは次のとおりです

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[] Save 並べ替えの結果は、基本的に、並べ替えて保存した後、使用されなくなったので unset($data[$key]) できます

&$data を使用します。 unset($data[$key]); と組み合わせたアドレスによるパラメーターの受け渡しにより、ループの数が減り、効率が数倍向上します

ただし、Pid は ASC でソートする必要があります。そうしないと、表示が不完全になります

$value['Count'] = $count; 現在のレベルはテンプレート内のレベルごとに処理されます ツリー構造を生成します

ソート前後のデータ構造は次のとおりです

table

ソート前のデータ構造
id pid
1 0
2 0
3 1
4 3

ソート後のデータ構造

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

コントローラーで呼び出します

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

テンプレートで使用します 3da5ee660f26a047cce0b9503e43e613 通常の出力で必要なものを生成できます ツリー構造のフィールドは上記のように変更されます

テスト後、項目が 3,000 個ある場合、0.5 秒かかります1,000個の場合は約0.02秒かかりますが、3,000個を超えると効率が大幅に低下します。これ以上の詳細なテストはまだ行われていません

。この記事の事例を読んだ後は、PHP 中国語 Web サイトの他の関連記事にも注目してください。

推奨読書:

PHPの遅延静的バインディングの詳細な説明

thinkPHPフレームワークの自動入力原理と使用法の詳細な説明

以上がCMSPRESSは無制限の分類を実現(コードあり)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。