PHP实现文章评论系统
最近工作中需要完成一个评论的功能,上网查找了几个评论系统的展示样式。最后参考“多说”和“畅言”等评论系统,自己使用PHP语言实现了一个简单的评论系统。并记录了两种方式(递归方式和非递归方式)的实现过程,以及分析两种方式的优缺点,但前端如何实现就没有展现了。
首先设计数据库如下:
create table `comments`(`id` bigint unsigned not null AUTO_INCREMENT,`arc_id` bigint unsigned not null COMMENT '文章id',`user_id` bigint unsigned not null COMMENT '用户id',`comment_id` bigint unsigned not null DEFAULT '0' COMMENT '回复某个评论的id',`content` varchar(255) not null DEFAULT '' COMMENT '评论或回复的内容',`add_time` timestamp not null DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',PRIMARY KEY (`id`),KEY `arc_id` (`arc_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '文章评论表';
创建测试数据如下:
具体实现方案如下(在ThinkPHP框架上实现):
1、递归方式
优点:实现代码简单,而且如果评论的层级固定在5个层次一下的话,建议使用该种方法,这样前端通过这种数据结果实现简单。
缺点:如果评论的层级没有固定的话,前端将无法展示评论信息了,而且如果层级太多的话,将会极大的消耗内存,更要命的是每次递归都得查询数据库,性能将大大的降低。
/*** @param $arc_id 文章id* @param int $comm_id 评论id* @param array $result* @return array*/
function getCommlist($arc_id, $comm_id = 0, &$result = array()){ //获取评论列表if(empty($arc_id)){return array();}$_where = "arc_id = {$arc_id} AND comment_id = {$comm_id}";$res = M('comments')->where($_where)->order('add_time DESC')->select();if(empty($res)){return array();}foreach ($res as $cm) {$thisArr = &$result[];$cm["_child"] = getCommlist($arc_id,$cm['id'],$thisArr);$thisArr = $cm;}return $result;
}
部分数据展示如下:
2、非递归方式(堆栈方式实现)
优点:只查询一次数据库,性能较好。可以实现n层级的评论,前端也能很好的展示
缺点:代码稍微复杂,对于固定的层级评论,前端展示评论较为复杂。
/*** @param $arc_id 文章id* @return array*/
public function getCommlist($arc_id){if(empty($arc_id)){return array();}$res = M('comments')->where(array('arc_id'=>$arc_id))->order('add_time ASC')->select();$dataList = $stack = array();if($res){foreach($res AS $k=>$v){ //先将评论的数据进行入库(即comment_id=0)if($v['comment_id'] == 0){$v['_level'] = 0; //设置层级数$v['_root'] = $v['id']; //标识评论idarray_push($stack,$v); //入栈unset($res[$k]);}}while(!empty($stack)){$node = array_pop($stack); //出栈$dataList[] = $node;foreach($res as $_k=>$_v){if($_v['comment_id'] == $node['id']){$_v['_level'] = $node['_level']+1; //设置层级数$_v['_root'] = $node['_root']; //标识评论idarray_push($stack,$_v); //入栈unset($res[$_k]);}}}}return $dataList;
}
数据展示效果如下:
PHP实现文章评论系统相关推荐
- php用户评论系统,php实现文章评论系统
最近工作中需要完成一个评论的功能,上网查找了几个评论系统的展示样式.最后参考"多说"和"畅言"等评论系统,自己使用PHP语言实现了一个简单的评论系统.并记录了两 ...
- 河源微信分销系统开发日记:wordpress每篇文章评论人数统计
// 每篇文章评论数量 function comments_users($postid=0,$which=0) {$comments = get_comments('status=approve&am ...
- java 微信文章评论点赞,基于SpringBoot的微信授权登录+仿微信朋友圈+文章查看(评论)系统...
springboot技术内幕架构设计与实现 53.1元 包邮 (需用券) 去购买 > 本系统是基于Spring Boot 技术实现的文章发布系统,该系统是我和我朋友一起做的,本文仅介绍自己的这部 ...
- 带评论的php文章系统,启用Typecho原生评论系统替代多说
2017年6月1日起,多说(duoshuo.com)社会化评论系统正式停止提供服务.拾肆自从转入Typecho以来一直未启用系统自带的评论系统,而使用了多说的评论系统. 采用多说可以不限于单独一个站点 ...
- iOS10.3 的评论系统
作者 xuyafei86 关注 2017.03.30 12:39* 字数 428 阅读 265评论 4喜欢 11 iOS10.3 对 App 的评论系统进行了较大的升级.主要在三个方面. 支持 App ...
- Hexo博客NexT主题美化之评论系统
前言 更多效果展示,请访问我的 个人博客. 效果图: Valine 诞生于2017年8月7日,是一款基于Leancloud的快速.简洁且高效的无后端评论系统. 教程: 登录 Leancloud 官网, ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析...
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入 ...
- Nuxt.js开发中碰到的问题(二)引入gitment评论系统
博客原文链接 概述 在初步完成功能之后就想着加上评论功能,最开始是想自己实现一个,但是综合考虑之后,还是决定引入 gitment 这个成熟的评论系统代替: 虽然之前在项目中有实现评论系统的相关经验,但 ...
- Hexo瞎折腾系列(8) - 添加评论系统
前言 Hexo的NexT主题本身就集成了一些评论系统,多说啊之类的已经关闭服务的略过不提,目前比较多人用的有畅言.来必力livere.Gitment.Gitalk.Disqus等. 我刚用的评论系统的 ...
- 利用“多说”制作留言板、评论系统
留言板和评论系统在网站建设中会经常用到,今天为大家介绍如何利用多说来为自己的网站制作留言板.评论系统!注意以下只是介绍一下简单的创建设置,更多功能大家可以自己去探索! 1.进入多说网站 http:// ...
最新文章
- ecmall开发记录(三)
- listview刷新,延迟加载,用单行刷新取代notifyDataSetChanged
- 三列布局-中间固定俩边自适应-和两边固定中间自适应布局
- spring容器bean的作用域 spring容器是否是单例的一些问题
- Anaconda3的安装
- Oracle11g x64使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine
- IKM 线上测试JavaScript
- 耗时两周,纯手敲python入门级基础笔记
- 用CSS动画制作一个正方体
- M1 pod install CocoaPod 报错解决办法
- ACE库中ACE_Msg_Log日志对象浅论
- PRML勘误表2011
- 什么是AJAX?如何实现AJAX异步请求?
- 计算机技术在多晶体衍射中的应用,透射电镜电子衍射在晶体结构分析中的应用...
- 解决 git@gitlab.com: Permission denied (publickey,gssapi-with-mic,password)
- crash(crashed)
- 达梦数据库DM8安装ODBC驱动无法正常连接
- 【LabVIEW】入门-视觉
- 【云原生之Docker实战】使用docker部署IT资产管理系统GLPI
- 【常用html、bat、QQ、py代码】
热门文章
- Maya---捕捉命令
- 计算机科学箴言集 -- 编程珠玑续
- IDO-SBC3019-V1B:PX30 超强 CPU 搭载 Android/Linux 系统(Android8.1)
- Linux如何删除用户
- 天才在左,疯子在右,我们在哪?
- mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
- ASP.NET 实现简单的注册界面(使用asp控件)
- linux计算与检查md5值
- 操作系统实验七(银行家算法)
- 计算机win7设置用户密码,怎么给win7电脑设置开机密码_w7电脑开机密码怎么设置...