Avatar billede hono Nybegynder
09. november 2003 - 22:30 Der er 13 kommentarer og
1 løsning

Associativt eller numerisk array

Når man henter nogle data ud af databasetabel, kan man med funktionen mysql_fetch_array() få genereret et array. Dette er mig bekendt både associativt og numerisk. Altså man kan både få udskrevet dataene ved at skrive; echo $arraynavn[1] og ved at skrive echo $arraynavn[feltnavn].

Jeg bruger imidlertid en foreach-løkke, da jeg gerne vil have udskrevet både arrayets nøgler og værdi. Det gør jeg således:

while($my_array = mysql_fetch_array($my_result)){

        foreach($my_array as $key => $value){

                            echo "\n<b>$key:</b> $value<br>";
   
                        }
                   
            }

Men her opfattes arrayet som et numerisk array, og de nøgler jeg får udskrevet er således 1, 2, 3 osv. Hvad skal jeg gøre for at det opfattes som en et associativt array og mine nøgler dermed i stedet bliver databasefelternes navne?

På forhånd tak for hjælen

Hono
Avatar billede hono Nybegynder
09. november 2003 - 22:33 #1
Nej Undskyld, det er ikke rigtigt hvad jeg har skrevet. Nøglerne udskrives ikke kun som 1, 2, 3 osv. Derimod skrives alle "poster" 2 gange, en gang hvor den numeriske nøgle vises, efterfulgt af værdien, og en gang hvor den associative nøgle vises efterfulgt af værdien. Det jeg ønsker er at kun den associative vises, ikke den numeriske!
Avatar billede erikjacobsen Ekspert
09. november 2003 - 22:39 #2
Avatar billede jakoba Nybegynder
09. november 2003 - 22:39 #3
if ( ! is_numeric( $key ) ) {
            echo "\n<b>$key:</b> $value<br>";
    }

mysql tillader såvidt jeg ved ikke tal som kolonnenavne så den skulle være ok.

mvh JakobA
Avatar billede rackbox Nybegynder
09. november 2003 - 22:42 #4
Du kan skrive en ekstra option til mysql_fetch_array:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
...
}

Så får du kun den del af dit array, der er associativ. Prøv at kigge på http://dk.php.net/mysql_fetch_array for mere info.
Avatar billede hono Nybegynder
09. november 2003 - 22:42 #5
Perfekt! Begge to virker, men da ericjacobsen var hurtigt, og hans løsning vel også er den mest "korrekte" får han pointene.

Tak til jer begge!
Avatar billede rackbox Nybegynder
09. november 2003 - 22:43 #6
Jeg er ked af at fortælle dig det.. Men min løsning er den mest skalerbare, og dermed den mest korrekte ;-)
Avatar billede hono Nybegynder
09. november 2003 - 22:46 #7
rackbox >> Som du måske kan se, skrev du dit svar så sent at jeg ikke nåede at tage det med i betragning. Men også tak til dig selvfølgelig! Men på hvilken måde er dit mere skalerbart end ericjacobsens?
Avatar billede erikjacobsen Ekspert
09. november 2003 - 22:48 #8
hans virker også i PHP3, hvis jeg husker korrekt
Avatar billede jakoba Nybegynder
09. november 2003 - 22:50 #9
Hvis vi skal slås så vil jeg lige forsvare min, den virker helt tilbage til alleførste version af mysql_fetch_array.  :-))
Avatar billede erikjacobsen Ekspert
09. november 2003 - 22:51 #10
Jakoba: Prøv

  create table hh ( `33` int(11) )

;))
Avatar billede erikjacobsen Ekspert
09. november 2003 - 22:52 #11
Og dermed virker din ikke, jakoba - ikke nødvendigvis i hvert fald *g*
Avatar billede jakoba Nybegynder
09. november 2003 - 22:52 #12
lyseslukker. men så OK da.
Avatar billede rackbox Nybegynder
09. november 2003 - 23:28 #13
Det var ikke for at tiltuske mig points.. Blot for at gøre din kode mere overskuelig og "korrekt".. Med min funktion får du mulighed for på sigt at skrive eks.
while ($row = mysql_fetch_array($result, MYSQL_NUM)){
...
}
eller
while ($row = mysql_fetch_array($result, MYSQL_BOTH)){
...
}

for at få en anden repræsentation.. Dette kan endda styres med en variabel.
Avatar billede rackbox Nybegynder
09. november 2003 - 23:32 #14
Det er altid bedre at lade det rigtige program håndtere det, det er bedst til. I dette tilfælde findes der en funktion til at returnere et associativt array ved at sætte en option. I virkeligheden anbefales det af PHP at bruge mysql_fetch_array($result, MYSQL_ASSOC) fremfor mysql_fetch_assoc($result), idet sidstnævnte er udledt af førstnævnte og ikke omvendt.. Men bare det virker for dig, så er vores opgave jo udført med success ;-)
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