22. maj 2014 - 01:02Der er
6 kommentarer og 1 løsning
Hjælp til forståelse af array gymnastik.
Hejsa
Jeg er ved at bygge en dynamisk menu og har fundet noget kode på nettet. jeg kan sagtens få det til at virke, men jeg har lidt forståelses vanskeligheder ved det der foregår når data puttes ind i arrayet. jeg har derfor brug for lidt hjælp til at forstå hvad der foregår.
Først koden:
// Select all entries from the menu table
$sql ="SELECT MenuItemID, MenuLabel, MenuLink, ItemParent FROM menuitems WHERE MenuItemID IN (SELECT MenuItemID FROM permissions WHERE Permission = 'Yes' AND MemberID = 109) ORDER BY ItemParent, ItemSortOrder, MenuLabel";
$result = mysqli_query($connection, $sql);
// Create a multidimensional array to conatin a list of items and parents $menu = array( 'items' => array(), 'parents' => array() );
// Builds the array lists with data from the menu table while ($row = mysqli_fetch_assoc($result)) { // Creates entry into items array with current menu item id ie. $menu['items'][1] $menu['items'][$row['MenuItemID']] = $row; // Creates entry into parents array. Parents array contains a list of all items with children $menu['parents'][$row['ItemParent']][] = $row['MenuItemID']; }
1: Først bygges der et multidimensional array (menu) med 2 arrays inden i.
2:Så laver vi en while løkke som gennemgår hver række som blev hentet fra SQL sætningen.
3:Her er det så det går galt. sætningen "$menu['items'][$row['MenuItemID']] = $row;" er jeg ikke helt med på.
4: Det samme gælder for næste sætning "$menu['parents'][$row['ItemParent']][] = $row['MenuItemID'];"
Hvis nogen lige kunne uddybe hvad det er der bliver lagt ind i de 2 sub arrays.
Når Danmark og Europa skal ruste sig til en ny sikkerhedspolitisk virkelighed, handler det ikke længere kun om materiel og mandskab.
Slettet bruger
22. maj 2014 - 08:05#1
3: Hvis du forestiller dig at $row['MenuItemID'] = 3 Så ser sætningen sådan her ud: $menu['items'][3] = $row
4: På samme måde, hvis $row['ItemParent'] = 3 Så ser sætningen sådan her ud:
$menu['parents'][3][] = $row['MenuItemID'];
Den tomme parantes [] betyder bare at der tilføjes en værdi til arrayet.
Det er en meget almindelig måde at lave multidimensionelle arrays.
Et simpelt eksempel: Du vil opbygge et array med postnumre. Du henter alle postnumre og bynavne fra en sql-tabel og opbygger et array således: $postnr_array[9670] = "Løgstør"; $postnr_array[9530] = "Støvring"; $postnr_array[$row_postnrtabel['postnr']] = $row_postnrtabel['bynavn'];
Hvis så på et senere tidspunkt henter personer fra en anden tabel, hvor du kun har postnr. og gerne vil have bynavn vist kan du bruge dit array således: echo $row_person['navn']."<br>"; echo $row_person['adresse']."<br>"; echo $row_person['postnr']." ".$postnr_array[$row_person['postnr']];
3: Hvis jeg forstår det rigtigt det du skriver så oprettes der et nyt element I arrayed med "KEY = 3" men hvad kommer data for Key = 3 så til at bestå af ?
Med tildelingen ... = $row vil Key elementet så indeholde, indholdet af "MenuItemID, MenuLabel, MenuLink, ItemParent" eller kun af "MenuItemID" ???
Som jeg læser dit eksemple opbygger du et array med key elementer som er selve postnummeret og med tilhørende data som er bynavnet eller er det helt forkert ?
Synes godt om
Slettet bruger
22. maj 2014 - 10:50#3
Data kommer til at bestå af et array indeholdende feltnavnet som key og indeholdet af feltet som data: $menu['items'][3]['MenuItemID'] = data fra db $menu['items'][3]['MenuLabel'] = data fra db $menu['items'][3]['MenuLink'] = data fra db $menu['items'][3]['ItemParent'] = data fra db
Super, mange tak for hjælpen. Smid lige et svar så du kan få dine point :o)
/Flemming
Synes godt om
Slettet bruger
23. maj 2014 - 07:33#7
Svar :)
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.