PHP排序数组函数

时间:2012-10-14 08:14:43

标签: php

我有一个由评论组成的表格。其中一些是对其他注释的回复,并在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不是我正在寻找的功能,但却是我能想到的壁橱。我不知道从哪里开始。请记住,可能存在对其他回复的回复。

2 个答案:

答案 0 :(得分: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,您很可能会有这样一个列来引用您的评论。用于存储评论,在顶级或其他评论内。

答案 1 :(得分: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");

希望它有所帮助。