recursieve array
Ik kom er even niet uit. Ik wil een class method maken die van een array de volledige inhoud kan laten zien als key: value. Zo'n value kan bestaan uit een string, maar ook uit een andere array of een object. Van zo'n array of object wil ik dan ook weer de key-values tonen. Hier een voorbeeldje van hoe zo'n array eruit zou kunnen zien, gevolgd door hoe ik het op het scherm wil tonen. Ik heb al wat dingen geprobeerd met array_walk en array_walk recursive, maar het lukt telkens maar niet.
Zo zou de inhoud van de array er schematisch uit kunnen zien:
Code (php)
1
2
3
4
2
3
4
mijnarray => array('foo' => 'bar', 'bar' => 'foo')
mijnobject => new stdClass, property 'dag' => maandag, property 'jaar' => 2012, property 'object' => new stdClass, property 'foobar' => phphulp
beest => kat
naam => piet
mijnobject => new stdClass, property 'dag' => maandag, property 'jaar' => 2012, property 'object' => new stdClass, property 'foobar' => phphulp
beest => kat
naam => piet
Ik wil dan een method hebben die op het scherm dit laat zien:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
mijnarray:
foo: bar
bar: foo
mijnobject:
dag: maandag
jaar: 2012
object:
foobar: phphulp
beest: kat
naam: piet
foo: bar
bar: foo
mijnobject:
dag: maandag
jaar: 2012
object:
foobar: phphulp
beest: kat
naam: piet
Ik ben even de weg kwijt. Iemand die me kan helpen? Het inspringen wil ik doen door middel van lijsten <ul>'s. Daar kom ik wel uit. Maar ik moet eerst weten hoe ik telkens de key en value krijg. Bij een string gaat het wel, maar bij een array of object wil het niet meer. Iemand?
Gewijzigd op 18/03/2013 20:02:51 door Ozzie PHP
Al eens gekeken naar print_r() of var_dump()?
ja, maar ik wil er echt een opmaak aan meegeven met <ul>'s en <li>'s dus dat gaat 'm niet worden.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$var = array("string", array(1, 2, 3), object(), functie($foo));
$html = print_r($var, true);
$html = str_replace(" => ", ": ", $html);
echo $html;
?>
$var = array("string", array(1, 2, 3), object(), functie($foo));
$html = print_r($var, true);
$html = str_replace(" => ", ": ", $html);
echo $html;
?>
Het kan ongetwijfeld ook met met ingewikkkeldere code, maar dit het proberen waar. Print_r() doet precies wat je wilt, alleen nog niet met html opmaak.
http://dbug.ospinto.com/ kan handig zijn?
http://snipplr.com/view/47401/pretty-printr/ ook wel
Of http://forum.pclayer.com/alternative-to-print-r-with-syntax-highlight-t28371.html
Dit lijkt mij een handige, toppertje: http://krumo.kaloyan.info/#example
Gewijzigd op 18/03/2013 21:50:48 door Eddy E
Thanks, die 1e link heb ik in ieder geval werkend... maar toch vraag ik me af of wat ik wil niet zelf te maken is... is er niemand die dit weet?
En als je het zelf wilt maken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Ik krijg nu de juiste informatie te zien. Nog niet helemaal met de juiste lay-out, maar dat krijg ik wel gefixt. Thanks!
En je begrijpt ook hoe het werkt? (dat is namelijk veel belangrijker)
Probleem was... ik probeerder het foreacht gedeelte te vervangen door array_walk... en toen kwam ik er niet meer uit. Kun je dit resultaat ook bereiken met array_walk? Of is een foreach de enige juiste oplossing?
En je kan gewoon de spullen van het foreach statement in een function block zetten en je bent klaar (wel nog even $output binnenhalen)
Oké thanks... maar misschien stomme vraag... maar wat is nu precies het verschil tussen array_walk en een foreach loop? Ik dacht dat het eigenlijk op hetzelfde neerkwam??
foreach is bedoeld om door een array te lopen en iets met deze elementen te doen.
array_walk is bedoeld om de array elementen aan te passen (en daar buiten officieel niks).
ah oke... thanks :)
array_walk is eigenlijk een uitbreiding van array_map. Als je die functie bekijkt snap je voor welke situaties array_walk gemaakt is.
Maar ik dacht dus dat ik met array_map een wat sjiekere oplossing had gevonden voor een foreach loop... maar nee dus :-)
Ik krijg nu bijvoorbeeld dit als resultaat:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
naam: piet
leeftijd: 30
hobbies:
0: internet
1: vakantie
spelletjes:
boggle
yahtzee
leeftijd: 30
hobbies:
0: internet
1: vakantie
spelletjes:
boggle
yahtzee
Wat ik graag zou willen is dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
naam : piet
leeftijd: 30
hobbies :
0 : internet
1 : vakantie
spelletjes: boggle
yahtzee
leeftijd: 30
hobbies :
0 : internet
1 : vakantie
spelletjes: boggle
yahtzee
Kan iemand me alsjeblieft helpen hierbij?
TableHelper heb gedaan.
ik heb nu geen tijd om het in dit voorbeeld toe te passen, maar je zult iets moeten doen zoals ik ooit in een Dat ziet er ingewikkeld uit. En ik wil het ook in een normale function hebben staan en niet in een class eigenlijk... alhoewel ik die class wel zou kunnen aanroepen vanuit de functie natuurlijk. Maar het ziet er nogal (te) ingewikkeld uit voor mij om eerlijk te zijn...
str_repeat de string aanvullen totdat elke string dezelfde lengte is.
Zo moeilijk is het niet. Je kijkt per kolom wat het langste woord is en die lengte sla je op in een variabele. Vervolgens ga je met Ja, dat idee had ik ook... maar ik kwam er niet goed uit. Maar gebruik je dan geen tabel?
nee, tis een codeblock, geen tabel :)