[英]How to loop over the query results of a comments system with replies?
我試圖顯示數據庫中的注釋。 一些評論是其他評論的孩子(父母),所以在我的數據庫中我把一個父的字段用null作為默認值,如果新評論是子評論我在該字段中插入父評論的id。
插入工作正常,但我面臨顯示系統的問題。 我嘗試在其paren下顯示每個子注釋,並顯示我的代碼父元素,但子元素仍為空。
我已經嘗試使用print_r
函數來查看數組中是否有數據,它顯示數據,我想我遺漏了一些東西,或者我的代碼構造中出現了一些邏輯錯誤。
if(is_array($this->comments))
{
$comments = array();
$parent_array = array();
?>
<ol>
<?php
foreach($this->comments as $key => $value) {
if($value['parent'] === 0) {
$comments[] = $value;
} else {
$parent_array['parent'][] = $value;
$comments[] = $parent_array;
}
}
foreach($comments as $key => $value) {
?>
<div>
<li style="color: #dc143c; font-size: 14pt;margin-left: 20px;">
- <?php echo $value['id']; ?>
</li>
<p> <?php echo $value['title'] ; ?></p>
<p> <?php echo $value['description'] ; ?></p>
<?php
}
}
?>
看看你的代碼,我認為你沒有把你的評論和子評論分組。 嘗試這個
<?php
$all_comments = [];
foreach($this->comments as $key => $value){
if($value['parent'] === 0)
{
$all_comments[$value['id']]['comment'] = $value;
} else {
$all_comments[$value['parent']]['subcomment'][] = $value;
}
}
foreach($all_comments as $comment){
// display only main comments here
if(isset($comment['comment'])) {
?>
<div>
<li style="color: #dc143c; font-size: 14pt;margin-left: 20px;">
- <?php echo $comment['comment']['id']; ?>
</li>
<p> <?php echo $comment['comment']['title'] ; ?></p>
<p> <?php echo $comment['comment']['description'] ; ?></p>
<!-- All its sub-comments -->
<?php
if(isset($comment['subcomment'])) {
displaySubComment($all_comments, $comment);
}
}
}
function displaySubComment($all_comments, $comment)
{
foreach($comment['subcomment'] as $subcomment) {
?>
<h3> Sub-Comments </h3>
<p> <?php echo $subcomment['title'] ; ?></p>
<p> <?php echo $subcomment['description'] ; ?></p>
<?php
// re-iterate over itself, if more comments exist under a comment and display all
if(array_key_exists($subcomment['id'], $all_comments)) {
displaySubComment($all_comments, $all_comments[$subcomment['id']])
}
}
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.