Avatar billede jbob Nybegynder
08. maj 2005 - 12:31 Der er 14 kommentarer og
1 løsning

Kan extract bruges til at hente flere arrays?

Jeg forsøger at bruge extract til at hente variable og deres værdier ud fra en mySQL tabel. $qr er resultatet af mit query:

for ($i = 0; $i < sizeof($qr); $i++) {
  extract($qr[$i]);
}

Her får jeg for hver værdi af $i et set af variable fx $navn=hans $alder=27 osv.

Det jeg vil have er $navn[0]=hans $alder[0]=27 osv.

Kan det lade sig gøre med extract? Eller er der en anden automatisk måde at pakke variablene ud med så jeg ikke skal oprette den i PHP men kan hente direkte fra MySQL
Avatar billede bojo Nybegynder
08. maj 2005 - 12:35 #1
$navn=array();
$alder=array();
foreach( $qr as $key => $value ) {
  $navn[] = $key;
  $alder[] = $value;
}
Avatar billede jbob Nybegynder
08. maj 2005 - 13:03 #2
Ja, men jeg har ca. 20 kolonner/variable i min tabel med en lang række rækker/tilhørende værdier. Det jeg tænkte var om der er en mulighed for at PHP automatisk kan danne variable ud kolonnenavnet således: $kolonnenavn[rækkenummer]=celleværdi
Avatar billede barklund Nybegynder
08. maj 2005 - 13:16 #3
Tror det kan gøres kort og godt som:

for ($i = 0; $i < sizeof($qr); $i++) {
  foreach($qr[$i] as $k=>$v) {
    $$key[$i] = $v;
  }
}

Men puha, det er ikke den kønneste ide i verden :)

--
Morten Barklund
Avatar billede jbob Nybegynder
08. maj 2005 - 15:09 #4
Det ser vildt ud. Jeg har bakset lidt med det men jeg kan ikke få det til at virke. Skulle det kunne danne nye variable - altså med udgangspunkt i MySQL tabellen ligeson extract?
Avatar billede barklund Nybegynder
08. maj 2005 - 15:32 #5
Ja. Men der er nu intet mysql i ovenstående (eller i dit script), da du har hentet det hele ud i et php array allerede.
Avatar billede barklund Nybegynder
08. maj 2005 - 15:32 #6
Hovsa, der er jo også en fejl:

for ($i = 0; $i < sizeof($qr); $i++) {
  foreach($qr[$i] as $k=>$v) {
    $$k[$i] = $v;
  }
}

Sådan :)

--
Morten Barklund
Avatar billede jbob Nybegynder
08. maj 2005 - 17:44 #7
Det ser rigtigt ud men jeg kan ikke få det til at dutte. Måske min tabel er skruet forkert sammen eller også kører jeg på den forkerte $qr. Jeg henter den ved at kalde denne:

$qr = hent ("select * from photo ORDER BY count DESC")

function hent($query) {
  $resultat = mysql_query($query);

  if(!$resultat) {
    udskriv_fejl("Could not perform query.");
  }

  while($raekke = mysql_fetch_array($resultat)) {
    $resultat_array[] = $raekke;
  }

  return $resultat_array;
}
Avatar billede barklund Nybegynder
08. maj 2005 - 18:34 #8
Jeg kan ikke sige hvad problemet er - jeg aner jo ikke, hvilket resultat du får og hvad du ikke får.
Avatar billede jbob Nybegynder
08. maj 2005 - 19:31 #9
Selvfølgelig ikke - beklager! Når jeg sætter følgende ind i din kode:

echo 'variabel: '.$k.'='.$v.'<br>'

Kan jeg se at værdierne for $k og $v passer, men variablene dannes ikke så problemet er måske syntaksen i linien:

$$k[$i] = $v;
Avatar billede barklund Nybegynder
08. maj 2005 - 20:05 #10
Måske operatorerne ikke associerer i den rækkefølge, jeg forventer... Prøv med:

${$k}[$i] = $v;
Avatar billede jbob Nybegynder
08. maj 2005 - 20:12 #11
Genialt!!! Nu virker det - jeg har prøvet en millard forskellige måder at skrive det udtryk på. Mange tak for hjælpen - smid et svar.
Avatar billede barklund Nybegynder
08. maj 2005 - 20:14 #12
Finfin... :)
Avatar billede jbob Nybegynder
08. maj 2005 - 20:17 #13
Super!
Avatar billede barklund Nybegynder
08. maj 2005 - 20:26 #14
(husk at acceptere ;))
Avatar billede barklund Nybegynder
09. maj 2005 - 10:43 #15
Tark for points :)
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