首页 > 解决方案 > 通过 comment_id == parent_id 对多维数组进行排序

问题描述

我有多维数组

Array
(
    [0] => Array
        (
            [comment_id] => 32
            [article_id] => 5
            [parent_id] => 31
            [user_id] => 22
            [content] => dolor sit amet consectetur adipisicing 
            [created_at] => 02-04-2021
        )

    [1] => Array
        (
            [comment_id] => 30
            [article_id] => 5
            [parent_id] => 29
            [user_id] => 22
            [content] => Lorem ipsum dolor sit amet.
            [created_at] => 01-04-2021
        )

    [2] => Array
        (
            [comment_id] => 31
            [article_id] => 5
            [parent_id] => 29
            [user_id] => 22
            [content] => Sit amet consectetur adipisicing 
            [created_at] => 02-04-2021
        )

    [3] => Array
        (
            [comment_id] => 29
            [article_id] => 5
            [parent_id] => 0
            [user_id] => 22
            [content] => dolor sit amet consectetur adipisicing 
            [created_at] => 01-04-2021
        )

)

我试着得到

Array
(
    [comment_id] => 29
    [article_id] => 5
    [parent_id] => 0
    [user_id] => 22
    [content] => dolor sit amet consectetur adipisicing 
    [created_at] => 01-04-2021
    [comments] => Array
        (
            [0] => Array
                (
                    [comment_id] => 31
                    [article_id] => 5
                    [parent_id] => 29
                    [user_id] => 22
                    [content] => Sit amet consectetur adipisicing 
                    [created_at] => 02-04-2021
                    [comments] => Array
                        (
                            [comment_id] => 32
                            [article_id] => 5
                            [parent_id] => 31
                            [user_id] => 22
                            [content] => dolor sit amet consectetur adipisicing 
                            [created_at] => 02-04-2021
                        )

                )

            [1] => Array
                (
                    [comment_id] => 30
                    [article_id] => 5
                    [parent_id] => 29
                    [user_id] => 22
                    [content] => Lorem ipsum dolor sit amet.
                    [created_at] => 01-04-2021
                )

        )

)

基于 [parent_id] == [comment_id]

我确实尝试了一些 if 语句的 foreach 循环,但我不知道多维数组将来会有多深。和匿名 fc 还不是我的朋友 :( 任何人都可以给我一个提示如何解决这个问题。

非常感谢

标签: phparraysloopsmultidimensional-arrayanonymous-function

解决方案


您可以分两步执行此操作:

  1. 按评论 ID 索引您的条目
  2. 循环遍历每个条目并comments用当前条目填充父条目,同时确保记住哪个是树的根。

代码:

$arr_by_comment_id = array_column($arr, null, 'comment_id');

$root_entry = null;
foreach ($arr_by_comment_id as &$entry) {
    if ($entry['parent_id'] === 0) {
        $root_entry =& $entry;
    } elseif (array_key_exists($entry['parent_id'], $arr_by_comment_id)) {
        $arr_by_comment_id[$entry['parent_id']]['comments'][] = $entry;
    }
}
unset($entry);  // For safety (since references were used)

print_r($root_entry);

演示


推荐阅读