Hallo,
Ik ben nog volop php aan het leren en ik was op zoek naar een
flexibele oplossing om parents en children uit een tabel te ordenen.
Om het wat duidelijker te maken is hier de structuur van een tabel :
CREATE TABLE `klas` (
`klasID` tinyint(4) NOT NULL auto_increment,
`parentklas` tinyint(4) NOT NULL default '0',
`klas` varchar(10) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`klasID`)
)
Waarbij de parent van een klas dus in parentklas wordt opgegeven. De
'hoofdklassen' hebben als parent 0.
Dit zou ik vb. ook kunnen gaan gebruiken om navigatie en subnavigatie
op te slaan. Ik ga er van uit dat we op voorhand niet weten hoeveel
niveaus diep we gaan.
Ik wou dus een stuk flexibele code schrijven om dit alles in volgorde
(telkens parent met zijn children) te plaatsen, elke groep children
in een geneste lijst.
Hiervoor heb ik momenteel de volgende oplossing :
/// start code
function walkthrough($arr) {
echo "<ul>";
foreach ($arr as $key => $val) {
echo "<li>" . $val;
$arr = "klas" . $key;
echo "</li>";
global ${$arr};
if (is_array($$arr)) {
walkthrough(${$arr});
}
}
echo "</ul>";
}
$qryKlas = "SELECT * FROM klas ORDER BY parentklas, klas";
$rsKlas = mysql_query($qryKlas, $con) or die (mysql_error());
$aantal = mysql_num_rows($rsKlas);
while ($rij = mysql_fetch_assoc($rsKlas)) {
$naam = "klas" . $rij["parentklas"];
${$naam}[$rij["klasID"]] = $rij["klas"];
}
$arr = "klas0"; //beginarray
walkthrough(${$arr});
Waar ik dus een associatieve array aanmaak per parentklas.
Ik vroeg me af of er geen oplossing is die het aanmaken van zo'n
array overbodig maakt en waar het dus mogelijk is gewoon telkens je
recordset te gaan doorlopen.
Ik dacht ook dat het globaal maken van een variabele niet echt aan te
raden is, maar ik zag hier anders niet direct een oplossing.
Alle suggesties zijn dus welkom.
Bedankt alvast

Likes:


Quote