25. august 2010 - 20:08Der er
15 kommentarer og 1 løsning
Oprette <li> liste ud fra 2 arrays
Jeg har et lille problem, men at få lavet en liste (<ul> og <li>) ud fra 2 arrays. Tror det er fordi jeg ikek kan se skoven for bare træer, og så plejer det jo at hjælpe at spørge herinde.
Alle numrene i underakt stemmer overens med en hovedakt. F.eks. hører 225 ind under 20, og 350 hører ind under 30 osv. Der er ikke samme antal underakter tilhørende hver hovedakt, så man kan ikke sige, der skal være 5 eller lignede under en hovedakt.
Det jeg gerne skulle hen til var noget lignede nedenstående. * 20 * 225 * 230 * 235 * 30 * 305 * 360
Men det kan jeg ikke rigtigt så grejet, hvordan jeg lige får gjort.
det er lidt en bøvlet måde at gøre det på, da du er nødt til at løbe arrayet igennem, hver gang du skal se om der er et underpunkt der passer til et hovedpunkt.
du har ikke mulighed for at lave dine arrays på en anden måde?
Synes godt om
Slettet bruger
26. august 2010 - 02:57#2
Kunne det ikke gøres med ét array - med "indrykning" styret af længden på "nr"
Det lykkedes mig så sent i går (nat), at finde det rigtige træ... ;-)
<? for ($i=1;$i<=count($HOVEDAKT);$i++) {?> <li> <?php echo $HOVEDAKT[$i]['nr']; for ($j=1;$j<=count($UNDERAKT);$j++) { if (substr($UNDERAKT[$j]['nr'],0,1)."0" == $HOVEDAKT[$i]['nr']) {?> <ul> <li> <?php echo $UNDERAKT[$j]['nr'];?> </li> </ul> <? } }?> </li> <? }?>
Men som splazz også skriver, er det ikke f...... elegant. Men kom gerne med kodeforslag, hvis I har en bedre måde.
Med hensyn til arrays, så har jeg selv overvejet om de ikke kunne laves på en anden måde, men kan ikke rigtigt se en bedre mulighed, end det jeg gør nu, men måske I kan oplyse mig :-)
De kommer fra en administratordel, hvor en superbruger kan/skal oprette dem i 2 lister. En til hovedakt, hvor der er et nummer samt en beskrivelse. En anden liste til underakt, hvor der også bare er et nummer og en beskrivelse.
Meningen er at der altid skal være en tom indtastningsrække forneden ved hver akt, så superbrugeren løbende kan tilpasse indholdet, altså gøre det større eller mindre.
Jeg overvejde fra start af at gemme det i et array, menså skal supperbrugeren indtaster de samme hovedakt mange gange, nemlig ud for hver tilhørende underakt, og det er da jo ikke nogen som gider.
Så kunne jeg måske også samle de 2 arrays til et inden jeg skal lave listen, men omvendt om jeg løber dem igennem or samler dem lige inden de skal bruges eller undervejs er vel et fedt?
Tja, det ville jo være samme problematik angående opsplitning for at undgå redudant data, men det kunne da sagtens løses, og jeg har også adgang til en database (MySQL).
Men det er et system jeg har arvet, og da det i tidernes morgen blev udviklet, blev hele administrationsdelen, gemt i php-filer, hvorimod front-enden bliver gemt i databasen.
Jeg kan ikke give en forklaring på hvorfor det er valget blev at gemme i php-filer, en lidt underlig løsning når man nu har en database, synes jeg, men desværre forligger der ingen dokumentation over dette designvalg.
Derudover ville det kræve alt for store og gennemgribende ændringer i systemet, og ligge dette om nu, så jeg vælger bare at fortsætte i samme gænge.
$sql = "SELECT o_nr,GROUP_CONCAT(ua.u_nr SEPARATOR '</li>\n<li>') u_nr_gr" ."FROM overakt" ."LEFT JOIN (SELECT u_nr FROM underakt GROUP BY o_id) ua" ."USING(o_id)" ."GROUP BY o_id" ."ORDER BY o_nr"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { echo $row['a_nr']."\n<ul>\n<li>" .$row['u_nr_gr']."</li>\n</ul>"; }
Eksemplet ovenfor er uhyre groft, og jeg kan næsten garantere for at det ikke vil fungere uden noget polering.
Det samme, men med lidt større chance for success første gang:
$sql = "SELECT o_nr,o_id FROM overakt ORDER BY o_nr"; $result = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { echo $row['a_nr']."<ul>\n" $u_sql = "SELECT u_nr FROM underakt WHERE o_id = ".$row['o_id']." GROUP BY o_id"; $u_result = mysql_query($u_sql) or die(mysql_error()); while ($u_row = mysql_fetch_assoc($u_result)) { echo "<li>".$u_row['u_nr']."</li>\n" } echo "</ul>\n"; }
he he, nu er det ikke noget du skal bruge til på at tjekke igennem, for som jeg skrev, vil det kræve for meget arbejde at ligge det om. Så jeg kan afvise, at ville bruge det i denne situation.
Nå, jeg har implementeret min egen løsning i, som jeg dog har nogle andre problemer med. Med det opretter jeg et nyt spørgsmål til.
Jeg ved ikke om din løsning virker ggxdg, men smide et svar, så deler vi pointene.
Synes godt om
Slettet bruger
26. august 2010 - 14:52#12
Du sku' tage og give min løsning (#2) en overvejelse mere - der er ingen redundans (hvor?) - Kun én "selv-organiserende" tabel som automatisk leverer den træstruktur du søger..
Du sku' tage og give min løsning (#2) en overvejelse mere - der er ingen redundans (hvor?) - Kun én "selv-organiserende" tabel som automatisk leverer den træstruktur du søger..
Så skal du uddybe den noget mere, for jeg ved ikke lige hvordan det skal gøres.
Jeg skal bruge det til en stor mængde indtasningsfelter, som alle tilhører en underakt og dermed og en hovedakt.
For overskuelighedens skyld, så vil vi gerne have, så de kan foldes ud og ind alt efter hvilke der lige skal bruges.
Det har jeg dog fået løst langt hen af vejen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.