国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php實現文章評論系統

2024-05-05 00:06:46
字體:
來源:轉載
供稿:網友

最近工作中需要完成一個評論的功能,上網查找了幾個評論系統的展示樣式。最后參考“多說”和“暢言”等評論系統,自己使用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 '文章評論表';

創建測試數據如下:

php,文章評論系統

具體實現方案如下(在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;}

部分數據展示如下:

php,文章評論系統

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'];  //標識評論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;}

數據展示效果如下:

php,文章評論系統

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 赤峰市| 锡林浩特市| 鸡西市| 江孜县| 黄山市| 高要市| 新沂市| 威远县| 崇礼县| 旬阳县| 尉犁县| 红原县| 彭山县| 资中县| 宁波市| 文水县| 治多县| 平舆县| 松阳县| 纳雍县| 汝州市| 桃园市| 台州市| 美姑县| 延吉市| 延安市| 杭州市| 和龙市| 卢龙县| 三原县| 时尚| 迁西县| 额敏县| 定西市| 库尔勒市| 三原县| 余庆县| 永德县| 佛冈县| 二手房| 和政县|