ホームページ  >  記事  >  バックエンド開発  >  PHP Infinitus分類による分類木生成の実装方法の紹介

PHP Infinitus分類による分類木生成の実装方法の紹介

黄舟
黄舟オリジナル
2018-05-14 16:00:142210ブラウズ

この記事では、主に PHP で Infinitus 分類を実装して分類ツリーを生成する方法を紹介し、Infinitus 分類の原理と実装方法を例の形で簡単に分析し、PHP の配列トラバースと判断関連の操作スキルを必要としています。参照してください

この記事の例では、PHP が Infinitus 分類を実装して分類ツリーを生成する方法を説明します。参考までに、詳細は次のとおりです。

現在の分類データベースの設計は、基本的に次のとおりです。このように、各分類には ID の主キー フィールドがあり、pid は親クラスの ID を指します。無限レベルの分類が可能で、取り出されるデータは次の形式になります:

$arr = array(
  array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'),
  array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'),
  array("id" => 3 , "pid" => 1 , 'cat' => '栏目三'),
  array("id" => 4 , "pid" => 2 , 'cat' => '栏目四'),
  array("id" => 5 , "pid" => 1 , 'cat' => '栏目五'),
  array("id" => 6 , "pid" => 5 , 'cat' => '栏目六'),
  array("id" => 7 , "pid" => 5 , 'cat' => '栏目七'),
  array("id" => 8 , "pid" => 6 , 'cat' => '栏目八'),
  array("id" => 9 , "pid" => 1 , 'cat' => '栏目九'),
  array("id" => 10 , "pid" => 0 , 'cat' => '栏目十'),
  array("id" => 11 , "pid" => 10 , 'cat' => '栏目十一'),
  array("id" => 12 , "pid" => 11 , 'cat' => '栏目十二'),
  array("id" => 13 , "pid" => 2 , 'cat' => '栏目十三'),
  array("id" => 14, "pid" => 13 , 'cat' => '栏目十四')
);

あまり言うことはないので、直接処理コードに進みましょう:

//生成无限极分类树
function make_tree($arr){
  $refer = array();
  $tree = array();
  foreach($arr as $k => $v){
    $refer[$v['id']] = & $arr[$k]; //创建主键的数组引用
  }
  foreach($arr as $k => $v){
    $pid = $v['pid'];  //获取当前分类的父级id
    if($pid == 0){
      $tree[] = & $arr[$k];  //顶级栏目
    }else{
      if(isset($refer[$pid])){
        $refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
      }
    }
  }
  return $tree;
}

テスト実行:

$cat = make_tree($arr);
print_r($cat);

実行結果:

Array
(
  [0] => Array
    (
      [id] => 1
      [pid] => 0
      [cat] => 栏目一
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 3
              [pid] => 1
              [cat] => 栏目三
            )
          [1] => Array
            (
              [id] => 5
              [pid] => 1
              [cat] => 栏目五
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 6
                      [pid] => 5
                      [cat] => 栏目六
                      [subcat] => Array
                        (
                          [0] => Array
                            (
                              [id] => 8
                              [pid] => 6
                              [cat] => 栏目八
                            )
                        )
                    )
                  [1] => Array
                    (
                      [id] => 7
                      [pid] => 5
                      [cat] => 栏目七
                    )
                )
            )
          [2] => Array
            (
              [id] => 9
              [pid] => 1
              [cat] => 栏目九
            )
        )
    )
  [1] => Array
    (
      [id] => 2
      [pid] => 0
      [cat] => 栏目二
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 4
              [pid] => 2
              [cat] => 栏目四
            )
          [1] => Array
            (
              [id] => 13
              [pid] => 2
              [cat] => 栏目十三
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 14
                      [pid] => 13
                      [cat] => 栏目十四
                    )
                )
            )
        )
    )
  [2] => Array
    (
      [id] => 10
      [pid] => 0
      [cat] => 栏目十
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 11
              [pid] => 10
              [cat] => 栏目十一
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 12
                      [pid] => 11
                      [cat] => 栏目十二
                    )
                )
            )
        )
    )
)

以上がPHP Infinitus分類による分類木生成の実装方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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