PHP实现无限分类的实现方法
无限级分类是一种设计技巧,在开发中经常使用,本篇文章主要介绍PHP实现无限分类的实现方法,有需要的可以了解一下。
无限级分类是一种设计技巧,在开发中经常使用,例如:网站目录、部门结构、文章分类。笔者觉得它在对于设计表的层级结构上面发挥很大的作用,比如大家在一些平台上面,
填写邀请人,它就是一种上下级的关系,上级会有多个下级,下级又会有自己的分支,大多数都是利用递归的思想去实现。话不多说,首先来温故一下递归的实现
递归(程序调用自身的编程技巧):
1、$_GLOBALS[result]
2、static $result
3、参数引用&
举例:遍历1-10
$i=0; function deeploop( $i ){ global $i; $i++; echo $i; if( $i<10 ){ deeploop($i); } } function deeploop( ){ static $i=0; $i++; echo $i; if( $i<10 ){ deeploop($i); } } function deeploop( &$i=0 ){ $i++; echo $i; if( $i<10 ){ deeploop($i); } }
一、无限分类实现:
1、表设计设置父id 顶级父id设为0 建立族谱树;每一个分类都需记录它的父级id。( pid=0 代表顶级 )
id pid catename cateorder createtime ( 主键id,父id,分类name,分类排序,创建时间)
举例:网站的分类目录结构;餐饮的分类结构;评论的结构
2、全路径无限分类(以一个字段将所有父级id按顺序记录下来)
id path catename cateorder createtime ( 主键id,逗号分隔的顺序排列父id,分类name,分类排序,创建时间)
优缺点:
全路径查询方便;增加,移动分类时数据维护稍显复杂;
二、举例实现(网站目录):
分类表:
#父级Id递归法 CREATE TABLE `deepcate`( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `pid` int(11) NOT NULL DEFAULT 0, `catename` char(25) NOT NULL, `cateorder` int(6) , `createtime` date )ENGINE=INNODB default CHARSET=utf8; //数据 INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'), ( 2,1,'美女',null,'2016-11-01'), ( 3,1,'新闻',null,'2016-11-01'), ( 4,2,'足球宝贝',null,'2016-11-01'), ( 5,2,'日韩明星',null,'2016-11-01'), ( 6,5,'美女写真',null,'2016-11-01'); #全路径 CREATE TABLE `qljcate` ( `id` int(11) NOT NULL, `path` char(255) , `catename` char(25) NOT NULL, `cateorder` int(6), `createtime` date )ENGINE=INNODB default CHARSET=utf8; INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'), ( 2,1,'美女图片',null,'2016-11-01'), ( 3,1,2,'足球宝贝',null,'2016-11-01'), ( 4,1,2,'日韩明星',null,'2016-11-01'), ( 5,1,2,4,'美女写真',null,'2016-11-01');
获取图片所在的目录路径:
#父级Id递归法 CREATE TABLE `deepcate`( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `pid` int(11) NOT NULL DEFAULT 0, `catename` char(25) NOT NULL, `cateorder` int(6) , `createtime` date )ENGINE=INNODB default CHARSET=utf8; //数据 INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'), ( 2,1,'美女',null,'2016-11-01'), ( 3,1,'新闻',null,'2016-11-01'), ( 4,2,'足球宝贝',null,'2016-11-01'), ( 5,2,'日韩明星',null,'2016-11-01'), ( 6,5,'美女写真',null,'2016-11-01'); #全路径 CREATE TABLE `qljcate` ( `id` int(11) NOT NULL, `path` char(255) , `catename` char(25) NOT NULL, `cateorder` int(6), `createtime` date )ENGINE=INNODB default CHARSET=utf8; INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'), ( 2,1,'美女图片',null,'2016-11-01'), ( 3,1,2,'足球宝贝',null,'2016-11-01'), ( 4,1,2,'日韩明星',null,'2016-11-01'), ( 5,1,2,4,'美女写真',null,'2016-11-01');
*注意点:
移动分类不能移到自己及其子类下面;删除分类 (只能删除最底层的分类,及不含子类的分类;换言之,只能从最底层删起).
思考图片类型下所有的图片分类?
#pid 父级id实现法 function GetAllcate( $id,&$result=array() ){ $sql = "SELECT * FROM deepcate WHERE pid in ({$id})"; $query = mysql_query( $sql ); $row = mysql_fetch_assoc( $query ); if( mysql_num_rows($row)>0 ) { $idlist = array(); while( $row ){ $result[] = $row; $idlist[] = $row['id']; } $id = implode(',',$idlist); GetAllcate( $id,$result ); } $result = array_unique( $result ); return $result; }
此类方法比较适用于查询所在父分类下所有的书籍、文章。。。当然,全路径可以直接获取,就不再此提出了。
实际操作中,我们可以根据实际情况设计合理的表结构。
举个实例,连锁门店实现商品的管理,门店的账户设置就会存在上下级关系,根据代理点的分区可能存在这种下级拥有自己下级,那么采用这种无限分类的方法就比较灵活面对这种关系体系,只需设定每个账户等级,就能对不同的门店设定权限分配。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
