Hi Leute,
ich muss ein Array auslesen und daraus eine verschachtelte HTML Liste bauen. Des besondere: Selbst Punkte, die auf gleicher Hierarchieebene liegen, sind Unterarrays. Das Parent Array Item von wirklichen Sub-Punkten befindet sich nach dem letzten Punkte der Subpunkte.
Mit der unten aufgeführten Variante der Funktion buildList war ich am nähsten dran. Darin fehlt nun aber die Abfrage nach dem Parent. Das habe ich nie an die richtige Stelle bekommen. Es hing immer am letzten der Subpunkte.
Genug der Worte - hier der Code (zur Verdeutlichung habe ich die Texte immer mit einer Nummerierung versehen):
Ich freue mich über jede Art von Hilfestellung. Danke!
Jochen
P.S.: Mir steht PHP5 5.2.0 und 5.0.3 zur Verfügung, falls das was zur Sache tut.
ich muss ein Array auslesen und daraus eine verschachtelte HTML Liste bauen. Des besondere: Selbst Punkte, die auf gleicher Hierarchieebene liegen, sind Unterarrays. Das Parent Array Item von wirklichen Sub-Punkten befindet sich nach dem letzten Punkte der Subpunkte.
Mit der unten aufgeführten Variante der Funktion buildList war ich am nähsten dran. Darin fehlt nun aber die Abfrage nach dem Parent. Das habe ich nie an die richtige Stelle bekommen. Es hing immer am letzten der Subpunkte.
Genug der Worte - hier der Code (zur Verdeutlichung habe ich die Texte immer mit einer Nummerierung versehen):
PHP-Code:
<?php
// The function that should render the HTML List
function buildList($desc, $ul = 0) {
if ($ul == 1) {
$html[] = '<ul>';
}
$subs = '';
// if there is a subitem create a new ul within li
if (is_array($desc['sub']) && count($desc['sub']) > 1) {
$subs = buildList($desc['sub'], 1);
}
$html[] = '<li>'.$desc['text'].$subs.'</li>';
// We found a next item
if (is_array($desc['next']) && count($desc['next']) > 0) {
$html[] = buildList($desc['next'], 0);
}
if ($ul == 1) {
$html[] = '</ul>';
}
return implode(chr(10), $html);
}
// It's all about this array
$descriptions = array (
'next' => array (
'next' => array (
'next' => array(
'next' => array(
'next' => array(
'next' => '',
'parent' => '',
'sub' => '',
'text' => '6) blabla blubb',
),
'parent' => '',
'sub' => '',
'text' => '5) blabla blubb',
),
'parent' => '',
'sub' => '',
'text' => '4) blabla blubb',
),
'parent' => '',
'sub' => array(
'next' => array(
'next' => array(
'next' => '',
'parent' => array (
'text' => '3) blabla blubb'
),
'sub' => '',
'text' => '3.3) blabla blubb',
),
'parent' => '',
'sub' => '',
'text' => '3.2) blabla blubb',
),
'parent' => '',
'sub' => '',
'text' => '3.1) blabla blubb',
#'text' => '' // kein text bei dem item, wo wir einen sub eintrag haben, denn parent steht dann am Ende der Kette
),
),
'parent' => '',
'sub' => '',
'text' => '2) blabla blubb',
),
'parent' => '',
'sub' => '',
'text' => '1) blabla blubb',
);
// Let's go!
$list = buildList($descriptions, 1);
echo '<pre>';
print_r($list);
echo '</pre>;
?>
Ich freue mich über jede Art von Hilfestellung. Danke!
Jochen
P.S.: Mir steht PHP5 5.2.0 und 5.0.3 zur Verfügung, falls das was zur Sache tut.
Kommentar