1

Disqus のようなコメント スレッドを作ろうとしています。各コメントに返信できるようにコメントを表示するようにPHPでロジックを設定するのに問題があり、それらのコメントは互いに添付されたままになります。

これが私のMySQLコメントテーブルです:

comment_id  comment  item_id  replied_to_id  time
 1           hello1    1          1         1:00pm
 2           hello2    1          1         2:00pm
 3           hello3    1          3         3:00pm
 4           hello4    2          4         4:00pm
 5           hello5    1          2         2:00pm
 6           hello6    1          3         6:00pm

item_idコメントが議論している親アイテムを示す列です。

を含むすべてのコメントをデータベースから取得すると、とが適切に一致item_id=1するようにそれらをスレッド化する方法がわかりません。たとえば、に一致する必要があります。comment_idreplied_to_idcomment_id=2comment_id=1

これが私のPHPです:

<?foreach($comments as $row){
  if($row->comment_id==$row->replied_to_id){
    echo $row->comment."-".$row->time; //desired output: hello1-1:00pm    
      foreach($comments as $sub_row){
        if($row->comment_id!=$sub_row->replied_to_id){
           echo $sub_row->comment."-".$sub_row->time;// desired output: hello2-2:00pm
             foreach($comments as $sub_sub_row){
                if($row->comment_id!=$sub_sub_row->replied_to_id){
                  echo $sub_sub_row->comment."-".$sub_sub_row->time;// desired output: hello5-5:00pm  
                }
             } 
        }
     }          
  }
  else{
    echo $row->comment."-".$row->time;   // desired output: hello3-3:00pm
  }
}

これは間違っているように見えます。これを行うためのより良い方法が必要です。

4

1 に答える 1

1

シンプルなデモ、必ずしも最適ではありませんが、機能しています:

function displayComments(array $comments, $parentId = null) {
    foreach ($comments as $comment) {
        if ($comment['replied_to_id'] == $parentId) {
            echo $comment['comment'];
            displayComments($comments, $comment['id']);
        }
    }
}

これは、トップレベルのコメントにreplied_to_id( null) がないことを前提としています。コメント1に返信する例1はあまり意味がありません。

于 2012-04-30T03:04:36.150 に答える