This time I will bring you a detailed explanation of the steps to implement unlimited comment nesting in PHP. What are theprecautions for implementing unlimited comment nesting in PHP? The following is a practical case, let's take a look.
In the process of designing BB, I have been thinking about whether it is possible to achieve infinite classification structure display and parent-child structure search without recursion, because if the algorithm here is not optimized, the consequences may be fatal! Just imagine, if an article has 300 comments, according to the normal recursive algorithm, the database must be queried at least 301 times, and this is without any nesting. If there are one or two levels of nesting or the number of comments exceeds 1,000 , then the database doesn’t crash directly?In fact, PHP's powerful array processing capabilities can already help us solve this problem quickly and conveniently. The following figure shows an infinite-level classified
108 comments with article ID 8
21 8 replies to comments with ID 1
328 Reply to the comment with ID 2
PHP array. The problem that may be involved here is the reorganization of the structural relationship of the array, that is, putting all the comments that stay in the first-level category under their own parentID to form the children item.Paste the code of this piece of code in the BBComment class below. I hope to share my ideas with you, and hope that everyone can come up with better and more efficient algorithms.
/** * 按ID条件从评论数组中递归查找 * */ function getCommentsFromAryById($commtAry, $id) { if ( !is_array($commtAry) ) return FALSE; foreach($commtAry as $key=>$value) { if ( $value['id'] == $id ) return $value; if ( isset($value['children']) && is_array($children) ) $this->getCommentsFormAryById($value['children'], $id); } } /** * 追加 子评论 到 主评论 中,并形成children子项 * * @param array $commtAry 原评论数据引用 * @param int $parentId 主评论ID * @param array $childrenAry 子评论的值 */ function addChildenToCommentsAry($commtAry, $parentId, $childrenAry) { if ( !is_array($commtAry) ) return FALSE; foreach($commtAry as $key=>$value) { if ( $value['id'] == $parentId ) { $commtAry[$key]['children'][] = $childrenAry; return TRUE; } if ( isset($value['children']) ) $this->addChildenToCommentsAry($commtAry[$key]['children'], $parentId, $childrenAry); } } $result = $this->BBDM->select($table, $column, $condition, 0, 1000); /* 开始进行嵌套评论结构重组 */ array_shift($result); $count = count($result); $i = 0; while( $i<$count ) { if ( '0' != $result[$i]['parentId'] ) { $this->addChildenToCommentsAry($result, $result[$i]['parentId'], $result[$i]); unset($result[$i]); } $i++; } $result = array_values($result); /* 重组结束 */
Implementation Method Two
The core code is extracted from WordPress'3', 'parent' => '0' ), array ( 'id' => '9', 'parent' => '0' ), array ( 'id' => '1', 'parent' => '3' ), array ( 'id' => '2', 'parent' => '3' ), array ( 'id' => '5', 'parent' => '1' ), array ( 'id' => '7', 'parent' => '1' ) ); function html5_comment($comment) { echo '
php curl with csrf-token verification simulation submission example detailed explanation
php implements database addition and deletion query Detailed explanation of the steps
The above is the detailed content of Detailed explanation of steps to implement unlimited comment nesting in PHP. For more information, please follow other related articles on the PHP Chinese website!