Stworzenie tablicy rekursywnie

Odpowiedz Nowy wątek
2018-12-21 13:52
Mały Pomidor
0

Witam,
być może założenia błędne ale mam taką bazę danych:

recursive_tab
id
name
parent_id

z wartosciami typu:
1 | Main | null
2 | Praca | 1
3 | Dom | 1

Mam te wszystkie elementy w tablicy recursives.

Chciałbym zrobic posortowana tableice w taki sposob aby najpierw byl parent a pozniej zagniezdzone jego dzieci czyli w sumie array bylby w takiej samej kolejnosci jak w bazie w tym przypadku, ale podczas iteracji chciablym sobie do obiektu dopisywac $level czyli dla Main 0, dla praca i dom 1, itd

Próbowałem czegoś takiego:

     private static function buildTree($elements, $parentId = null, $level = 0)
     {
         $result = array();

         foreach ($elements as $element) {

             if ($element->parent_id == $parentId) {
                 $result[] = $element;

                 return array_merge($result, self::buildTree($element, $element->id));
             }
         }

         return $result;
     }

i odpalam to:

$result = self::buildTree($elements, null);

ale nie działa. Sprawdziałęm też jakieś inne wariany. Ogólnie mam problem taki, że jak już odpale rekursywną metode to po zakończeniu nie wraca do flow i pozostałe elementy nie są iterowane.

Pozostało 580 znaków

2018-12-21 14:01
0

No to po kolei - zacznij od zmiany tej tablicy tak, abyś miał ją w formacie:

[
  1 => [
    'name' => 'Main',
    'parent_id' => null,
  ],

  2 => [
    'name' => 'Praca',
    'parent_id' => 1,
  ],

  /* ... */
]

Pozostało 580 znaków

2018-12-21 14:03
Mały Pomidor
0

Nie do końca rozumiem,
mam teraz arraya z obiektami.
Po co mam konwertować na arraya arrayów, czyli de facto z obiektu zrobić arraya?

Patryk27 napisał(a):

No to po kolei - zacznij od zmiany tej tablicy tak, abyś miał ją w formacie:

[
  1 => [
    'name' => 'Main',
    'parent_id' => null,
  ],

  2 => [
    'name' => 'Praca',
    'parent_id' => 1,
  ],

  /* ... */
]

Pozostało 580 znaków

2018-12-21 14:08
0

Powoli - dojdziemy do tego po kolei ;-)


Pozostało 580 znaków

2018-12-21 14:12
Mały Pomidor
0

Jeden wpis i załatwił sprawę to nad czym siedziałem kilka dni ;).
Ogólnie rezultat z bazy nie jest arrayem tylko obiektem po którym można iterować jak w arrayu, cos nie dziala rekurencja na nim jak nalezy ;).

thx

Patryk27 napisał(a):

Powoli - dojdziemy do tego po kolei ;-)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0