Avatar billede steenolsen1 Nybegynder
19. september 2005 - 10:11 Der er 16 kommentarer og
1 løsning

Array og whileløkke

Hej,

jeg kan ikke få udskrevet værdierne af mit array. Hvad gør jeg forkert?

Her laver jeg arrayet:

// Forbinder til db
include("incs/connect.php");
// Henter varegrupper og lægger dem i et array
$q_vg = mysql_query("SELECT * FROM varegrupper");
while($vg = mysql_fetch_array($q_vg)) {
    $vg_arr = array($vg[id] => $vg[vgnavn]);
    echo $vg[id].' - '.$vg[vgnavn].' - '.$vg_arr[$vg[id]].'<br>';
}


Derefter henter jeg alle varer fra tabellen varer og udskriver dem. I min while sætning, ønsker jeg at udskrive VAREGRUPPENAVNET hvor varegruppeid'et fra tabellen varegrupper eller lig med det registrerede varegruppeid fra tabellen varer:
$vis[vgid] == $vg_arr[$vis[vgid]]

Der bliver ikke udskrevet noget - hvorfor ikke?
Avatar billede jgivoni Nybegynder
19. september 2005 - 10:29 #1
Uden at kunne forklare hvorfor, så er det et problem med arrays inde i arrays.

Du kan ikke skrive:

$vg_arr[$vis[vgid]]

Prøv at dele den op i to:

$v = $vis[vgid]
$vis[vgid] == $vg_arr[$v]

Sker der noget?
Avatar billede jgivoni Nybegynder
19. september 2005 - 10:30 #2
eller måske kan du sætte anførselstegn her:

$vis[vgid] == $vg_arr["$vis[vgid]"]

?
Avatar billede jgivoni Nybegynder
19. september 2005 - 10:35 #3
og her:

echo $vg[id].' - '.$vg[vgnavn].' - '.$vg_arr["$vg[id]"].'<br>';
Avatar billede steenolsen1 Nybegynder
19. september 2005 - 10:41 #4
Hej,

sidste linie, ville jeg egentlig ikke have postet - det var mere for at udskrive til mig selv, så jeg kunne se at der skete noget :-)

$vis[vgid] == $vg_arr["$vis[vgid]"]    // virker ikke.

Dit første forslag udskriver id'et - eksempelvis 4. Det jeg gerne vil have udskrivet er varegruppenavnet det matcher id'et 4.

Kan du følge mig?
Avatar billede jgivoni Nybegynder
19. september 2005 - 11:02 #5
Jeg tror det ;-)

Prøvede du at rette din echo linie til:
echo $vg[id].' - '.$vg[vgnavn].' - '.$vg_arr["$vg[id]"].'<br>';
?
Avatar billede steenolsen1 Nybegynder
19. september 2005 - 11:08 #6
Nej den har jeg ikke rettet i, men den virker fint nok, fordi den står i en whileløkke for sig selv - altså før jeg egentlig skal bruge det. Den skal du glemme - forvirrer egentlig mere end den gavner :-( Den producerer følgende:
1 - Test på dansk - Test på dansk
2 - English category - English category
3 - Dansk test 2 - Dansk test 2
4 - Underkat - Underkat
5 - Dansk 3 - Dansk 3
6 - Hats & Boots - Hats & Boots
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:10 #7
Udskriv varegruppenavnet med id 4:

  print $vg_arr[4];

Udskriv varegruppenavnet med id fra en anden tabel

  print $vg_arr[$andetarray["etellerandet"]];
Avatar billede steenolsen1 Nybegynder
19. september 2005 - 11:18 #8
Det var lidt skidt, at jeg fik postet det forkerte kan jeg se :-)

Prøver lige "forfra". Det jeg vil er følgende:
Lave et array, på basis af en query fra tabellen varegrupper, der indeholder to former for data 1) varegruppeid'et og 2) varegruppenavnet. BAGEFTER ønsker jeg at lave en while løkke, der udskriver alle varer fra tabellen varer, og hvor varegruppen så udskrives fra array'et, hvor varegruppeid = varegruppeid fra de to tabeller.

Det jeg ønsker at lære at undgå, er at have whileløkker inden i hinanden, når det kan betale sig som i dette tilfælde med varegrupperne.

Dit forslag - erikjacobsen - udskriver ikke noget, og det er det der er problemet. Når jeg laver arrayet, som jeg fejlagtigt fik postet, så kører det uden for whileløkken og fungerer fint nok. Men så snart det kommer ind i whileløkken, er det som om der ikke længere er indhold i arrayet.
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:24 #9
Indholdet forsvinder ikke af sig selv ;)

Enten slår du op med en streng, når det er et tal, eller også bruger du en funktion, hvor du så skal gøre noget for at få fat i det igen.
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:26 #10
Hovsa, du laver jo også array på en kreativ, men forkert, måde. Du skal:

$vg_arr = array();
while (...) {
  $vg_arr[$vg[id]]=$vg[vgnavn];
}
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:26 #11
Og så altid huske "..."-ere eller '...'-ere. Jeg skrev bare af. Det skal naturligvis være:

$vg_arr = array();
while (...) {
  $vg_arr[$vg['id']]=$vg['vgnavn'];
}
Avatar billede jgivoni Nybegynder
19. september 2005 - 11:28 #12
steenolsen1: kan du poste HELE scriptet, og fortæller hvortil det virker?
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:32 #13
Og et trick du kan bruge en anden gang: skriv dit array ud med de indbyggede funktioner til det, fx:

$vg_arr = array();
while (...) {
  $vg_arr[$vg['id']]=$vg['vgnavn'];
}
print_r($vg_arr);

Så ved du hvad der er og ikke er i dine variabler.
Avatar billede steenolsen1 Nybegynder
19. september 2005 - 11:33 #14
Bingo!!! Der var den - tak for det Erik.

Nu kan jeg bruge det udenfor while løkken, og det var netop det der var formålet.

Jeg kan virkelig ikke fange det med arrays... Har virkelig svært ved det, og det irreterer mig, og det var derfor at jeg nu ville have det til at virke. Du har vel ikke et par links til et par ordentlige tutorials, der forklarer det så man kan forstå det?

Smid et svar :-)
Avatar billede erikjacobsen Ekspert
19. september 2005 - 11:38 #15
Alt kan jo læses på http://php.net/ - men der er sikkert andre steder.
Jeg samler slet ikke på point, tak.
Avatar billede jgivoni Nybegynder
19. september 2005 - 11:49 #16
erik; men måske bare for at få lukket spørgmålet???
Avatar billede steenolsen1 Nybegynder
19. september 2005 - 12:28 #17
Jeg har prøvet at læse på php.net nogle gange, men det trænger ikke helt igennem til mig - er nok bare ikke så hurtig :-)

Tak for det i hvert fald.

Jeg lukker selv så...
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

IT-JOB

Capgemini Danmark A/S

Java Engineer

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

Capgemini Danmark A/S

Market Segment Lead, CPRD