Flat array to tree

  • Författare
  • Meddelande

alevor657

git-maestro

  • Inlägg: 124
  • Blev medlem: 23 aug 2016, 20:22

Flat array to tree

Inlägg28 aug 2018, 16:22

Hej.

Jag behöver konvertera en array till en trädstruktur.
Exempel:

En sådan array:

Kod: Markera allt
array(5) {
  [0]=>
  object(stdClass)#64 (6) {
    ["content"]=>
    string(20) "Just declare it, lul"
    ["created"]=>
    string(19) "2018-08-27 16:14:50"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(6)
    ["replyTo"]=>
    NULL
  }
  [1]=>
  object(stdClass)#65 (6) {
    ["content"]=>
    string(17) "comment 1 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:43:19"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(9)
    ["replyTo"]=>
    int(6)
  }
  [2]=>
  object(stdClass)#66 (6) {
    ["content"]=>
    string(17) "comment 2 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:43:27"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(10)
    ["replyTo"]=>
    int(6)
  }
  [3]=>
  object(stdClass)#67 (6) {
    ["content"]=>
    string(17) "comment 3 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:58:00"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(11)
    ["replyTo"]=>
    int(6)
  }
  [4]=>
  object(stdClass)#68 (6) {
    ["content"]=>
    string(17) "comment 1 level 2"
    ["created"]=>
    string(19) "2018-08-27 17:58:13"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(12)
    ["replyTo"]=>
    int(9)
  }
}


till en sådan:

Kod: Markera allt
array(5) {
  [0]=>
  object(stdClass)#64 (7) {
    ["content"]=>
    string(20) "Just declare it, lul"
    ["created"]=>
    string(19) "2018-08-27 16:14:50"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(6)
    ["replyTo"]=>
    NULL
    ["comments"]=>
    array(1) {
      [0]=>
      array(3) {
        [0]=>
        object(stdClass)#65 (7) {
          ["content"]=>
          string(17) "comment 1 level 1"
          ["created"]=>
          string(19) "2018-08-27 17:43:19"
          ["email"]=>
          string(19) "test@test.se"
          ["userId"]=>
          int(6)
          ["replyId"]=>
          int(9)
          ["replyTo"]=>
          int(6)
          ["comments"]=>
          array(1) {
            [0]=>
            array(1) {
              [0]=>
              object(stdClass)#68 (6) {
                ["content"]=>
                string(17) "comment 1 level 2"
                ["created"]=>
                string(19) "2018-08-27 17:58:13"
                ["email"]=>
                string(19) "test@test.se"
                ["userId"]=>
                int(6)
                ["replyId"]=>
                int(12)
                ["replyTo"]=>
                int(9)
              }
            }
          }
        }
        [1]=>
        object(stdClass)#66 (6) {
          ["content"]=>
          string(17) "comment 2 level 1"
          ["created"]=>
          string(19) "2018-08-27 17:43:27"
          ["email"]=>
          string(19) "test@test.se"
          ["userId"]=>
          int(6)
          ["replyId"]=>
          int(10)
          ["replyTo"]=>
          int(6)
        }
        [2]=>
        object(stdClass)#67 (6) {
          ["content"]=>
          string(17) "comment 3 level 1"
          ["created"]=>
          string(19) "2018-08-27 17:58:00"
          ["email"]=>
          string(19) "test@test.se"
          ["userId"]=>
          int(6)
          ["replyId"]=>
          int(11)
          ["replyTo"]=>
          int(6)
        }
      }
    }
  }
  [1]=>
  object(stdClass)#65 (7) {
    ["content"]=>
    string(17) "comment 1 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:43:19"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(9)
    ["replyTo"]=>
    int(6)
    ["comments"]=>
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        object(stdClass)#68 (6) {
          ["content"]=>
          string(17) "comment 1 level 2"
          ["created"]=>
          string(19) "2018-08-27 17:58:13"
          ["email"]=>
          string(19) "test@test.se"
          ["userId"]=>
          int(6)
          ["replyId"]=>
          int(12)
          ["replyTo"]=>
          int(9)
        }
      }
    }
  }
  [2]=>
  object(stdClass)#66 (6) {
    ["content"]=>
    string(17) "comment 2 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:43:27"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(10)
    ["replyTo"]=>
    int(6)
  }
  [3]=>
  object(stdClass)#67 (6) {
    ["content"]=>
    string(17) "comment 3 level 1"
    ["created"]=>
    string(19) "2018-08-27 17:58:00"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(11)
    ["replyTo"]=>
    int(6)
  }
  [4]=>
  object(stdClass)#68 (6) {
    ["content"]=>
    string(17) "comment 1 level 2"
    ["created"]=>
    string(19) "2018-08-27 17:58:13"
    ["email"]=>
    string(19) "test@test.se"
    ["userId"]=>
    int(6)
    ["replyId"]=>
    int(12)
    ["replyTo"]=>
    int(9)
  }
}


Som du ser i andra utskriften så får jag alla "gamla" saker med i returvärde. Det vill jag inte ha, utan att jag vill bara flytta de.

Min funktion:
Kod: Markera allt
    private function parseReplies(array &$replies)
    {
        $res = [];

        foreach($replies as $reply) {
            $children = array_filter($replies, function($item) use ($reply) {
                return $item->replyTo == $reply->replyId;
            });

            if (!empty($children)) {
                $reply->comments[] = $this->parseReplies($children);
            }

            $res[] = $reply;
        }

        return $res;
    }


Jag försökte leka med unset på alla möjliga platser, men det ger ingen resultat. Kan inte klura ut hur jag löser detta.
Hjälp! :D

alevor657

git-maestro

  • Inlägg: 124
  • Blev medlem: 23 aug 2016, 20:22

Re: Flat array to tree

Inlägg28 aug 2018, 18:19

Löst det ;)

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 34 gäster