Stworzenie tablicy rekursywnie

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.

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,
  ],

  /* ... */
]
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,
  ],

  /* ... */
]
0

Powoli - dojdziemy do tego po kolei ;-)

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 ;-)

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