0

コメントで構成されたテーブルがあります。それらのいくつかは他のコメントへの返信であり、parent_commentidテーブルに値が設定されています。parent_columnidに値があるかどうか、結果セットの各要素をチェックする関数を作成しようとしています。ある場合は、要素全体を取得し、要素内で、現在の要素のparent_commentidと一致するcomment_idで並べ替えます。反復。これは私がこれまでに思いついたものです。

    function sort_comments($comments){
    $result = array();
    foreach($comments as $comment){
        if(is_null($comment['parent_commentid'])) $result[] = $comment;
        else{
            $parent_comment = array_search($comment['parent_commentid'], $comments);
            if($parent_array !== false) $result[$parent_comment][] = $comment;
        }
    }
}

array_searchは私が探している関数ではありませんが、私が考えることができるクローゼットです。ここからどこへ行けばいいのかわからない。他の返信への返信が存在する可能性があることにも注意してください。

4

2 に答える 2

0

後で参照できるように、コメントを独自のIDで保存する必要があります。

function sort_comments($comments){
    $result = array();
    foreach($comments as $comment){
        if(is_null($comment['parent_commentid'])){ 
            $result[$comment['commentid']] = $comment;
        }else{
            $parent_comment = $result[$comment['parent_commentid']]
            if($parent_comment) 
                $parent_comment[$comment['commentid']] = $comment;
            else
                // what happens in this case:
                // parent_commentid set, but no such comment exists?
        }
    }

に注意してください$comment['commentid']commentidコメントのID( ?)をどのように呼び出すかはわかりませんが、列があるのでparent_commandid、コメントを参照するためのそのような列がある可能性があります。これを使用して、コメントをトップレベルまたは他のコメント内に保存します。

于 2012-10-14T08:24:03.287 に答える
0

配列の内部フィールドでソートするには、通常、usortを使用します。Usortは再帰的なメソッドとして機能するため、配列内の要素を並べ替えるたびに、カスタム関数を呼び出すことができます。このようにして、よりクリーンなコードを取得できます。

次に例を示します。

function cmp_rand_score($a, $b)
{
  if($a["rand_score"] == $b["rand_score"]){
    return 0;
  }
  return ($a["rand_score"] < $b["rand_score"]) ? 1 : -1;
}

//If you are inside a class:
usort($rows, array($this, "cmp_rand_score"));

//If not you can call directly:
usort($rows, "cmp_rand_score");

それが役に立てば幸い。

于 2012-10-14T08:43:39.343 に答える