저자: Bailang 출처: http://www.manks.top/php_tree_deep.html 이 글의 저작권은 작성자에게 있으며, 재인쇄하셔도 좋습니다. 단, 이 글은 작성자의 동의 없이 보관되어야 합니다. , 원본 텍스트는 기사 연결 페이지의 눈에 띄는 위치에 제공되어야 하며, 그렇지 않으면 당사는 법적 책임을 추구할 권리를 보유합니다. 원본 기사에는 사진이 있습니다.
일상 개발에서 인피니투스 분류 문제에 직면하는 것은 어느 정도 불가피합니다. 효율성이나 논리와 같은 문제로 인해 이러한 문제가 항상 더욱 심각해지기 때문입니다. 오늘 우리는 이 문제를 간단히 처리하기 위해 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; } }
tree/index를 방문하여 렌더링을 살펴보겠습니다. 다음과 같이
이런 방식으로 우리는 궁극적으로 필요한 매우 명확한 트리 구조 다이어그램을 볼 수 있습니다.
이상에서는 PHP와 Infinitus 컨텐츠를 포함하여 PHP Infinitus 분류에 대해 논의한 사례를 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.