[php] tree inverten

Pagina: 1
Acties:

Onderwerpen


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Beetje moeilijke topictitel, het is ook een beetje een wazig probleem.

Ik heb de volgende array:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [page_id] => 4
    [parent_id] => 3
    [parent] => Array
        (
            [page_id] => 3
            [parent_id] => 0
            [parent] => Array
                (
                    [page_id] => 0
                    [parent_id] => 0
                )

        )

)


en deze wil ik graag omzetten in de volgende array:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [page_id] => 0
    [parent_id] => 0
    [child] => Array
        (
            [page_id] => 3
            [parent_id] => 0
            [child] => Array
                (
                    [page_id] => 4
                    [parent_id] => 3
                )

        )

)


echter ik kom er totaal niet uit. ik weet dat het recursief moet, maar het wil atm helemaal _niet_ lukken. heeft iemand een idee hoe dit op te lossen is?

  • Knutselsmurf
  • Registratie: December 2000
  • Nu online

Knutselsmurf

LED's make things better

Daar zijn wel methoden voor te bedenken, maar eerst zul je zelf precies vast moeten leggen wat je in bepaalde situaties als resultaat wlt hebben.

bijvoorbeeld:

code:
1
2
3
4
5
6
A
 - B
 - C
    - E
    - F
 - D

Geef maar eens aan wat je in dit geval als resultaat wilt hebben.

- This line is intentionally left blank -


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

/dev/null schreef op 27 november 2003 @ 01:05:
echter ik kom er totaal niet uit. ik weet dat het recursief moet, maar het wil atm helemaal _niet_ lukken. heeft iemand een idee hoe dit op te lossen is?
dat is toch niet zo moeilijk? Ga recursief in de boom, en bij elke iteratie bouw je een nieuwe array om de nieuwe boom heen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function invert ($orig, $n = null)
{
    if ($n == null)
        $n = array ("page_id" => $orig["page_id"], "parent_id" => $orig["parent_id"]);
    else
        $n = array ("page_id" => $orig["page_id"], "parent_id" => $orig, "child" => $n);

    if (isset ($orig["parent"]))
        return invert ($orig["child"], $n);
    else    // kan niet dieper de boom in, we zijn klaar
        return $n;
}

[ Voor 15% gewijzigd door .oisyn op 27-11-2003 03:19 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Dat doet bijna precies wat ik doe, alleen het werkt hier niet helemaal zoals het zou moeten. Ik heb de code iets gewijzigd, zodat de hele array geinvert wordt en er geen data verloren gaat (elke page-array had namelijk ook nog de index title, enz.)

Hier de gewijzigde code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function invert($original, $new = null) 
  { 
    if ($new == null){ 
      $new = $original;
      unset($new["parent"]); 
    } else  {
      $copy=$new;
      $new = $original;
      unset($new["parent"]); 
      $new["child"]=$copy;
    } 
    if (isset ($original["parent"])){ 
      return invert ($original["parent"], $new); 
    }
    else {    // kan niet dieper de boom in, we zijn klaar 
      return $new; 
    }
  }


Tnx .oisyn!

[ Voor 6% gewijzigd door chris op 27-11-2003 10:58 ]