国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 卢氏县| 丹阳市| 同仁县| 吉水县| 永新县| 甘洛县| 洪湖市| 遵化市| 尤溪县| 兴国县| 博爱县| 沙田区| 鄯善县| 皋兰县| 营山县| 宜阳县| 扎兰屯市| 古蔺县| 高邑县| 阿拉善右旗| 如东县| 平湖市| 时尚| 通州市| 渭源县| 清河县| 大冶市| 东平县| 元氏县| 澎湖县| 乌什县| 湟源县| 兰州市| 临清市| 仙桃市| 徐水县| 嘉兴市| 茌平县| 普安县| 萨迦县| 贡嘎县|