设为首页 收藏本站
查看: 1412|回复: 0

[经验分享] PHP 无限分类三种方式,非函数的递归调用!

[复制链接]

尚未签到

发表于 2015-8-23 15:51:29 | 显示全部楼层 |阅读模式
  今天分享下自己学习细说php中的无限分类方法。
  php无限分类大致有三种方式,
  1、数据库通过设置父类ID来进行唯一索引,然后使用函数的递归
  调用实现无限分类;
  2、数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat。程序实现比较简单;
  3、第三种不是太了解, 好像要使用到算法和数据结构进行排列。
  今天我主要分享下第二种方式,一开始也是找了很多资料,确实比较难理解。不过最终还是给搞明白了,因此记下随笔,希望通过这篇文章能够帮助到大家。
  


DSC0000.gif DSC0001.gif View Code


--
-- Table structure for table `category`
--
CREATE TABLE IF NOT EXISTS `category` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `catpath` varchar(255) DEFAULT NULL,
   `name` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=
11;
--
-- Dumping data for table `category`
--
INSERT INTO `category` (`id`, `catpath`, `name`) VALUES
(1, '0', '网站首页'),
(2, '0-1', 'Linux OS'),
(3, '0-1', 'Apache服务器'),
(4, '0-1', 'MySQL数据库'),
(5, '0-1', 'PHP脚本语言'),
(6, '0-1-2', 'Linux 系统教程'),
(7, '0-1-2', 'Linux 网络技术'),
(8, '0-1-2', 'Linux 安全基础'),
(9, '0-1-2-7', 'Linux LAMP'),
(10, '0-1-3-10', 'apache Server');


$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $conn);
mysql_query('set names UTF8');
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
$query = mysql_query($sql);
$option = '';
while ($row = mysql_fetch_array($query)) {
    /**
     * 第一种展示方法
    $space = str_repeat ( '    ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
    echo $space . $row ['name'] . '<br>';
    /**
     * 第二种展示方法
     */
    $space = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;',
    count(explode('-', $row['abspath'])) - 1);
    $option .= '<option value="' . $row['id'] . '">' . $space . $row['name'] .
     '</option>';
}
echo '<select name="opt">' . $option . '</select>';
  
  一、数据库设计:
  
DSC0002.png



1 --
2 -- Table structure for table `category`
3 --
4
5 CREATE TABLE IF NOT EXISTS `category` (
6   `id` int(11) NOT NULL AUTO_INCREMENT,
7   `catpath` varchar(255) DEFAULT NULL,
8   `name` varchar(255) DEFAULT NULL,
9   PRIMARY KEY (`id`)
10 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
11
12 --
13 -- Dumping data for table `category`
14 --
15
16 INSERT INTO `category` (`id`, `catpath`, `name`) VALUES
17 (1, '0', '网站首页'),
18 (2, '0-1', 'Linux OS'),
19 (3, '0-1', 'Apache服务器'),
20 (4, '0-1', 'MySQL数据库'),
21 (5, '0-1', 'PHP脚本语言'),
22 (6, '0-1-2', 'Linux 系统教程'),
23 (7, '0-1-2', 'Linux 网络技术'),
24 (8, '0-1-2', 'Linux 安全基础'),
25 (9, '0-1-2-7', 'Linux LAMP'),
26 (10, '0-1-3-10', 'apache Server');
  
  这里说明下,catpath的-链接符号不是固定的,可以选择,;等特殊符号。
  二、 PHP代码实现:
  



1 $conn = mysql_connect ( 'localhost', 'root', '' );
2 mysql_select_db ( 'test', $conn );
3 mysql_query ( 'set names UTF8' );
4 $sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
5 $query = mysql_query ( $sql );
6 while ( $row = mysql_fetch_array ( $query ) ) {
7     /**
8      * 第一种展示方法
9      */
10     /*$space = str_repeat ( '&nbsp;&nbsp;&nbsp;&nbsp;', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
11     echo $space . $row ['name'] . '<br>';*/
12     /**
13      * 第二种展示方法
14      */
15     $space = str_repeat ( '&nbsp;&nbsp;&nbsp;&nbsp;', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
16     $option .= '<option value="' . $row ['id'] . '">' . $space . $row ['name'] . '</option>';
17 }
18 echo '<select name="opt">' . $option . '</select>';
  
  上效果图:
DSC0003.png
  
  这里有几个关键的地方需要注意下:
  1、在数据库查询字段是用了concat函数,不了解的地方可以google下。
  2、第二个地方主要是用到了php中的str_repeat巧妙的设置了空格。
  有错误之处,望mail: chenghuiyong1987@gmail.com或者留言

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103081-1-1.html 上篇帖子: PHP字符编码绕过漏洞总结 下篇帖子: php中计算中文字符串长度、截取中文字符串
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表