<sup id="sjju3"><noscript id="sjju3"></noscript></sup>
    <big id="sjju3"></big>

  • <blockquote id="sjju3"></blockquote>
    <blockquote id="sjju3"></blockquote>

      <td id="sjju3"></td>

      <big id="sjju3"></big>
        <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
      1. php实现文章评论系统

         更新时间:2019年02月18日 09:36:23   作者:奇幻屋   我要评论

        这篇文章主要为大家详细介绍了php实现文章评论系统,具有一定的参考价值,感兴趣的小伙伴们可以参?#23478;?#19979;

        最近工作中需要完成一个评论的功能,上网查找了几个评论系统的展示样式。最后参考“多说”和“畅言”等评论系统,自己使用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层级的评论,前端也能很好的展示

        缺点:代码稍微复杂,?#26434;?#22266;定的层级评论,前端展示评论较为复杂。

        /**
         * @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'];  //标识评论id
          array_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'];  //标识评论id
           array_push($stack,$_v);  //入栈
           unset($res[$_k]);
          }
          }
         }
         }
         
         return $dataList;
        }

        数据展示效果如下:

        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

        相关文章

        • jQuery+Ajax+PHP“喜欢”评级功能实现代码

          jQuery+Ajax+PHP“喜欢”评级功能实现代码

          本文基于jQuery,通过PHP与mysql实现了一个评级功能,是一个简单的非常好的ajax应用实例,需要的朋友可以参考下
          2015-10-10
        • PHP抽奖算法程序代码分享

          PHP抽奖算法程序代码分享

          这篇文章主要分享了PHP抽奖算法程序设计,抽奖在日常生活中大家都会接触到,用php如何实现抽奖算法,需要了解的朋友可以参?#23478;?#19979;
          2015-10-10
        • 纯PHP生成的一个树叶?#35745;?#30011;图例子

          纯PHP生成的一个树叶?#35745;?#30011;图例子

          这篇文章主要介绍了纯PHP生成的一个树叶?#35745;?#30011;图例子,希望可以带给使用PHP进行图像编程的朋友一些帮助。
          2014-04-04
        • 基于PHP生成静态页的实现方法

          基于PHP生成静态页的实现方法

          本篇文章是对PHP生成静态页的实现方法进行了详细的分析介绍。需要的朋友参考下
          2013-05-05
        • 基于curl数据采集之单页面并行采集函数get_htmls的使用

          基于curl数据采集之单页面并行采集函数get_htmls的使用

          用第一篇的get_html()实现简单的数据采集,由于是一个一个执行才采集数据的传输时间就会是所有页面下载的总时长,一个页面假设1秒,那么10个页面就是10秒了。所幸curl?#22266;?#20379;了并行处理的功能
          2013-04-04
        • Laravel 5 框架入门(一)

          Laravel 5 框架入门(一)

          本文给大家介绍的是Laravel5框架入门的第一篇文章,主要给大家介绍些基础的知识,包括安装配置,数据库的建立与迁移,模型介绍,是篇非常不错的入门文章,这里推荐给大家。
          2015-04-04
        • PHP Web木马扫描器代码 v1.0 安全测试工具

          PHP Web木马扫描器代码 v1.0 安全测试工具

          PHP Web 木马扫描器 - 安全测试工具,一个在php环境下扫描php木马的工具,目前可扫出以下特征码。懒惰设计,直接套用phpspy样式。注意: 扫描出来的文件并不一定就是后门, 请自?#20449;?#26029;、审核、对比原文件
          2012-01-01
        • Symfony生成二维码的方法

          Symfony生成二维码的方法

          这篇文章主要介绍了Symfony生成二维码的方法,实例分析了采用google开放api和PHP类库phpqrcode两种方法,并结合实例详细说明了Symfony下使用EndroidQrCodeBundle生成二维码的具体步骤与实现方法,需要的朋友可以参考下
          2016-02-02
        • php文件操作实例代码

          php文件操作实例代码

          php中的文件操作比asp要简单很多,而且功能强大。学习php的朋友可以参考下
          2012-05-05
        • ZendFramework2连接数据库操作实例

          ZendFramework2连接数据库操作实例

          这篇文章主要介绍了ZendFramework2连接数据库操作,结合完整实例形式分析了ZendFramework2连接数据库的具体步骤、配置方法、相关操作技巧与注意事项,需要的朋友可以参考下
          2017-04-04

        最新评论

        2018白小姐一肖中特马
        <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
        <big id="sjju3"></big>

      2. <blockquote id="sjju3"></blockquote>
        <blockquote id="sjju3"></blockquote>

          <td id="sjju3"></td>

          <big id="sjju3"></big>
            <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
          1. <sup id="sjju3"><noscript id="sjju3"></noscript></sup>
            <big id="sjju3"></big>

          2. <blockquote id="sjju3"></blockquote>
            <blockquote id="sjju3"></blockquote>

              <td id="sjju3"></td>

              <big id="sjju3"></big>
                <code id="sjju3"><strong id="sjju3"><dl id="sjju3"></dl></strong></code>
              1. 香港六合彩彩图 湖南彩票动物总动员 大乐透136历史开奖统计 博彩网站测评 广西11选5开奖号码 北京pk10刷水被骗 金彩娱乐城备用地址 高频彩票投注 河南体育彩票走势图 海南飞鱼彩票走势图大全 上海快三开奖结果快1 曾道长二肖中特网 双色球杀蓝号码2019130 美国真人游戏电影 彩票七星彩开奖直播