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