[PHP] Content in onbekende hogere dimensie zetten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
Hoi,

mijn array:
code:
1
2
$test[1][5][2][6] =  "test"
$test[1][5][2][4] =  "blaat"


nu wil ik het volgende doen:
code:
1
2
3
$test[1][5][2][6] =  "test"
$test[1][5][2][4] =  "blaat"
$test[1][5][2][9] =  "raar"


Ik wil dus dmv $Parent = 2 aan te geven, de string "raar" met als key 9 toevoegen.
Je kan er 100% vanuit gaan dat er geen [1][2] bestaat..

Ik weet dus niet hoe diep mijn array van te voren is, hij wordt opgebouwd aan de hand van een database.

Maar het is dus lastig,
opzoeken in welke diepte "2" bestaat is geen probleem, maar hoe ik dat dan omzet naar een toevoeging??

maw: als $Diepte = 2 is, hoe kan ik dan zeggen: ([0] [1] [2] [3])
code:
1
$test[1][5][2][9] = "raar";



vaag omschreven probleem, ik vind het ook lastig om hierop te zoeken..
I need help! ;)

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Als ik het goed begrijp zijn die array-indices altijd uniek? Ofwel: in $test[x][y][z][w] zijn w, x, y en z allemaal altijd verschillend?

In dat geval zou je de array recursief kunnen doorlopen en het doorlopen 'pad' onthouden. In pseudo-code:

PHP:
1
2
3
4
5
6
7
8
9
10
function get_path($array)
{
  global $path;
  foreach ($array as $key => $value)
    if (is_array($value))
    {
      $path[] = $key;
      get_path($value);
    }
}

(mwah, niet echt pseudo-code, maar meer een opzetje)

Nu krijg je alleen nog maar de eerste array steeds terug, maar dan moet je even controleren op de '2' die je echt wil hebben. In ieder geval kan je hier een houvast aan hebben?

[edit]
en dan natuurlijk toevoegen met iets als (smerige code)
PHP:
1
2
3
4
5
$var = 'test';
foreach ($path as $p)
  $var .= '['.$p.']';
$var .= '['.$nieuwe_index.']';
$$var = 'nieuwe waarde';


[disclaimer]alles zo uit de mouw gezogen en niet getest[/disclaimer]

[ Voor 26% gewijzigd door sjroorda op 29-03-2005 15:29 ]


Acties:
  • 0 Henk 'm!

  • Hoppie
  • Registratie: Februari 2001
  • Niet online
Wat is eigenlijk de bedoeling van je array? Bevat ie een menu of iets dergelijks?
Graag wat meer info over de achtergrond.

Wat is nu je vraag? Hoe je "raar" vind in de array?

Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
ok, zo ziet mijn tree eruit:

code:
1
2
3
4
5
6
7
8
ID - Parent
2-
1-
6-2
5-2
3-4
4-6
7-6


ik wil dus naar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-2
  \ 6
     \ 7
     \ 4
       \ 3
  \ 5
-1

array:
[2]
[2][6]
[2][6][7]
[2][6][4]
[2][6][4][3]
[2][5]
[1]


Je ziet dat ik hier ook tegen het volgende probleem loop:
bij '3-4' geef ik al aan dat ID 3 een child is van 4, maar 4 wordt daaronder pas gemaakt.
Dit komt door Prioriteiten dat de lijst er zo uit komt rollen..

misschien moet ik mijn lijst eens anders opstellen... ga ik nu eens naar kijken

[ Voor 9% gewijzigd door Mir op 29-03-2005 15:35 ]


Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
ok, voor het gemak van de code heb ik nu in de database Child_Depths ingevoerd. Dit wordt opgevraagd bij het invoeren in de database dmv een recursieve functie die gewoon even doorloopt hoe diep de child zit.

Hierdoor krijg je netjes:
code:
1
2
3
4
5
6
7
ID Parent Depth
1-0-0
2-0-0
5-2-1
6-2-1
4-6-2
3-4-2


hierdoor kan je netjes eerst de parent 1 en 2 neerzetten.
Maar hoe kan ik dan Dynamisch de diepere velden toevoegen?

die viese $$var methode wil ik liever omzeilen! :)

Acties:
  • 0 Henk 'm!

  • Hielko
  • Registratie: Januari 2000
  • Laatst online: 12:48
Wil jij niet gewoon een boom maken ipv van een array??

Acties:
  • 0 Henk 'm!

  • Mir
  • Registratie: Maart 2001
  • Niet online
Jep, ik heb een boom maar wil die in een array opslaan..

is dat not-done dan?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat je wilt kan niet. Dit zou betekenen dat op positie [a][b][c] een element staat, terwijl er tegelijkertijd ook een array moet staan om alle kinderen te faciliteren.

Ik snap trouwens sowieso niet waarom er zulke moeilijke, onduidelijke en onbegrijpbare structuren met arrays gebouwd moeten worden. In dit geval zou een object met een element en een array vankinderen meer dan genoeg moeten zijn. Daar kun je voor de simpelheid nog een verwijzing naar de parrent in opnemen ook.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Hielko
  • Registratie: Januari 2000
  • Laatst online: 12:48
Mir schreef op dinsdag 29 maart 2005 @ 16:54:
Jep, ik heb een boom maar wil die in een array opslaan..

is dat not-done dan?
Het is handiger om een boom in een boom op te slaan, dat werkt meestal net iets beter ;). Overigens kan je gebalanceerde binaire bomen wel goed in een array zetten, maar een willekeurige boom in een array zetten lijkt me erg moeilijk....
Pagina: 1