Hallo,

Ik heb een platte array waar een parent_id in staat, die array zou ik graag willen nesten zodat ik het goed kan weergeven hoe kan ik dat het beste doen?
Wat bedoel je met 'nesten' ?
Gewoon duidelijk weergeven voor jou als ontwikkelaar ?

echo '<pre>';
print_r($myArray);
echo '</pre>';

Dan krijg je een mooie overzichtelijke en leesbare array :)
Dat kan nog makkelijker op één lijn:

<?php
echo '<pre>'.print_r($myArray,true).'</pre>';
?>
Met nesten bedoel ik dat het voor de eind gebruiker netjes leesbaar wordt in bij een list.
- Ariën - op 19/07/2016 10:57:53

Dat kan nog makkelijker op één lijn:

<?php
echo '<pre>'.print_r($myArray,true).'</pre>';
?>


Ow ik dacht dat print_r niet in een echo kon :D

[size=xsmall]Toevoeging op 19/07/2016 11:07:27:[/size]

M B op 19/07/2016 11:04:25

Met nesten bedoel ik dat het voor de eind gebruiker netjes leesbaar wordt in bij een list.


<ul><li>Lijstje
<?php echo implode('</li><li>',$myArray); ?>
</li>
</ul>
@MB In eerste instantie is het handig als de items in de goede volgorde staan. Ik weet niet of je deze items ophaalt uit een database of waar deze lijst vandaan komt?

Ten tweede: ik ga er vanuit dat je een soort van structuur hebt met meerdere niveau's zodat dit dus ook resulteert in een geneste bulleted list. Het weergeven hiervan zou je op meerdere manieren kunnen tacklen maar hoe je dit precies doet hangt mede af van hoe het array is opgebouwd. Als deze in de goede volgorde staat voor weergave zou je deze gewoon uit kunnen gaan draaien waarin je bijhoudt op welke "diepte" je zit. Is de parent gelijk aan het vorige element open je een <ul>, is de parent van een hogergelegen niveau dan sluit je deze <ul> weer. Je zou dus een soort van stack bij kunnen houden met parents ofzo.

Een alternatief is dat je bij elk element de "children" bijhoudt naast (of in plaats van) de parent. Je kunt dan namelijk een (recursieve) functie maken die zichzelf aanroept ingeval een element afstammelingen (children) heeft.

Maar zoals gezegd, veel (eigenlijk alles) hangt af van de manier waarop het array is opgebouwd. Hoe ziet deze er op dit moment uit?

En wat je dus eigenlijk aan het doen bent is het weergeven van een boomstructuur.

offtopic: voor debugging kan het dumpen van informatie handig zijn. Echter, deze informatie kan user input bevatten, bijvoorbeeld JavaScript met AJAX-calls. Het zou dus zo kunnen zijn dat jij met admin privileges code aan het debuggen bent die vervolgens data dumpt en daarmee ook uitvoert. Uit veiligheidsoverwegingen is het hier dus (wederom) ZEER belangrijk dat deze output ge-escaped wordt:
<?php
function dump($array) {
    echo '<pre>'.htmlspecialchars(print_r($array, true), ENT_QUOTES, 'UTF-8').'</pre>';
}
?>


Probeer het volgende array maar eens te dumpen zonder escaping:
<?php
$test = array('<script>while(1) alert(\'irritant he\')</script>');
?>

Reageren