ホームページ  >  記事  >  バックエンド開発  >  PHP Infinitus 分類の事例について話しましょう

PHP Infinitus 分類の事例について話しましょう

WBOY
WBOYオリジナル
2016-06-20 12:29:33839ブラウズ

日々の開発では、Infinitus 分類の問題に遭遇することは多かれ少なかれ避けられません。効率やロジックなどの問題により、このような問題は常に深刻になっているからです。今日は、yii2 フレームワークを基礎として、列 Infinitus を例として使用して、この問題の簡単な処理を実行します。

まず列データテーブルのツリーがあります

テーブルの構造は以下のとおりです (原文には画像があります)

テーブル構造は非常に単純であるようです。

いくつかのテストデータを挿入します

INSERT INTO `tree` (`id`, `parent_id`, `name`) VALUES (1, 0, 'A'), (2, 0, 'B'), (3, 1, 'a'), (4, 3, 'aa'), (5, 2, 'b'), (6, 4, 'aaa');

ツリー構造はおおよそ次のとおりです

|A |--a |----aa |------aaa |B |--b

これはまさに今回のデータです構造形式が必要な場合、必要な結果を得るためにそれを処理する方法を見てみましょう。

前に述べたように、これは yii2 に基づいているため、記述方法もオブジェクト指向のルールに従います。

class tree {     //访问index查看树形结构     public function actionIndex () {         $data = self::getTree();         //为了方便测试,我们这里以json格式输出         \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;         return $data;     }     //获取树     public static function getTree () {         //这里我们直接获取所有的数据,然后通过程序进行处理         //在无限极分类中最忌讳的是对数据库进行层层操作,也就很容易造成内存溢出         //最后电脑死机的结果         $data = static::find()->all();         return self::_generateTree($data);     }     //生成树     private static function _generateTree ($data, $pid = 0) {         $tree = [];         if ($data && is_array($data)) {             foreach($data as $v) {                 if($v['parent_id'] == $pid) {                     $tree[] = [                         'id' => $v['id'],                         'name' => $v['name'],                         'parent_id' => $v['parent_id'],                         'children' => self::_generateTree($data, $v['id']),                     ];                 }             }         }         return $tree;     } }

効果を確認するためにツリー/インデックスにアクセスしてみましょう。図は次のとおりです。


このようにして、最終的に必要となる、非常に明確なツリー構造図が表示されます。


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