Avatar billede flemche Nybegynder
22. maj 2014 - 01:02 Der 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.

/Flemming
Avatar billede AnyFellow Mester
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']];
Avatar billede flemche Nybegynder
22. maj 2014 - 09:54 #2
hmm okay,

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 ?
Avatar billede AnyFellow Mester
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

Du læser mit eksempel rigtigt.
Avatar billede flemche Nybegynder
22. maj 2014 - 14:04 #4
Super

Det var rart med lidt opklaring.

Jeg fik dog ikke helt fat I funktionen med de 2 [].
Hva poker sker der lige der ??
Avatar billede AnyFellow Mester
22. maj 2014 - 15:09 #5
Hvis du laver er array kan du indsætte data sådan her:

$array[0] = "test";
$array[1] = "test";
$array[2] = "test";
$array[3] = "test";

Her indsætter du værdien "test" i nøglerne 0,1,2 og 3.

Du kan også gøre således:
$array[] = "test";
$array[] = "test";
$array[] = "test";
$array[] = "test";

Her indsætter du værdien "test" i slutningen af dit array. Er arrayet tomt vil det så være i nøglerne 0,1,2 og 3.
Avatar billede flemche Nybegynder
22. maj 2014 - 15:17 #6
Super, mange tak for hjælpen.
Smid lige et svar så du kan få dine point  :o)

/Flemming
Avatar billede AnyFellow Mester
23. maj 2014 - 07:33 #7
Svar :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester