dongzhi4690 2015-04-16 23:00
浏览 48
已采纳

使用递归函数的PHP foreach多维数组[关闭]

I am using a recursive function to create a comment/reply system as yt or fb is using. I've done the function, but I cannot figure it out how to make the foreach function if I don't know for sure how many branches the array will have.

$coments = $this->mu_model->getByWhereStmt('comments', 'article_id', $article->id);
$comments = array();
    $comm = array();
    foreach($coments as $coment) {
        if($coment->reply_to_msg_id == 0) {
            $comm = array(
                'id' => $coment->id,
                'sender_id' => $coment->sender_id,
                'message' => $coment->message,
                'article_id' => $coment->article_id,
                'like' => $coment->like,
                'reply_to' => $coment->reply_to_msg_id,
                'added_date' => $coment->added_date,
                'deleted' => $coment->deleted,
                );
            $reply_id = $coment->id;
            if(!empty(reply_msg($reply_id, $coments))) {
                $repliess = reply_msg($reply_id, $coments);
                array_push($comm, $repliess);
            }
            array_push($comments, $comm);
        }
    }

function reply_msg($reply_id, $coments) {
        $replies = array();
        $reply = array();
        foreach($coments as $r_comment) {
            if($r_comment->reply_to_msg_id != 0) {
                if($r_comment->reply_to_msg_id == $reply_id) {  
                    $reply = array(
                            'id' => $r_comment->id,
                            'sender_id' => $r_comment->sender_id,
                            'message' => $r_comment->message,
                            'article_id' => $r_comment->article_id,
                            'like' => $r_comment->like,
                            'reply_to' => $r_comment->reply_to_msg_id,
                            'added_date' => $r_comment->added_date,
                            'deleted' => $r_comment->deleted,
                        );
                    if(!empty(reply_msg($r_comment->id, $coments))) {
                        $repli = reply_msg($r_comment->id, $coments);
                        array_push($reply, $repli);
                    }
                    array_push($replies, $reply);
                }
            }
        }
        return $replies;

Here is an example: http://i58.tinypic.com/118f8tt.png

  • 写回答

1条回答 默认 最新

  • 普通网友 2015-04-16 23:16
    关注

    What about:

    function process($array) {
        foreach ($array as $key=>$value) {
            // Process the content of the array
        }
        if (isset($array[8])) // If we have linked arrays
            foreach($array[8] as $subArray)
                process($subArray);
    }
    

    PS: I would also set a key for the linked arrays, like 'children' or 'subcomments'. In this way you could call isset($array['children']) and so on, which is more maintainable than accesing the array by its index.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统