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.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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 ?
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
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.