0

我有一张由评论组成的表格。其中一些是对其他评论的回复,并在 parent_commentid 表中设置了一个值。我正在尝试创建一个函数,该函数检查结果集中的每个元素是否在 parent_columnid 中有一个值,如果有,则取整个元素并在元素内对其进行排序,comment_id 与当前元素的 parent_commentid 匹配迭代。到目前为止,这是我想出的。

    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']. 我不知道您如何称呼评论的 id ( commentid?),但由于您有一个专栏,因此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 回答