Avatar billede breon Nybegynder
05. maj 2004 - 20:19 Der er 7 kommentarer og
1 løsning

problemer med nested functions

Jeg har to funktioner:

-Funktion 1 bygger en tabel
-Funktion 2 trækker nogle data ud af en database, og hvis de har værdien en bestemt værdi, bliver de gemt i et array.

Funktion 2 kalder jeg så i den nederste celle af den tabel jeg bygger med Funktion 1. Problemet er bare, at når jeg bruger et loop til at vise værdierne i arrayet fra Funktion 2, så bliver disse værdier vist øverst oppe over tabellen, og ikke i den celle jeg gerne vil have dem i.

Funktionerne ser således ud, i en lidt simplificeret udgave:

Funktion 1:
--------------------------------
function byg_tabel() {
echo "<table>
        <tr>
      <td>Overskrift</td>
    </tr>
    <tr>
      <td>Beskrivelse</td>
    </tr>
    <tr>
          <td>". vis_array($id) ."</td>
    </tr>
    </table>";
}

Funktion 2:
--------------------------------
function vis_array($id) {
    $query="select ex_icon1, ex_icon2, ex_icon3 from exercise where id='$id'";
    $db = new database('mysql');
    $result=$db->query($query,"rows");
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        if ($row['ex_icon1'] == 1) {
            $icon1 = "<img src='ikon1.jpg'/>";
            $array[] = $icon1;
        }
        if ($row['ex_icon2'] == 1) {
            $icon2 = "<img src='ikon2.jpg'/>";
            $array[] = $icon2;
        }
        if ($row['ex_icon3'] == 1) {
            $icon3 = "<img src='ikon3.jpg'/>";
            $array[] = $icon3;
        }
    }
  for ($counter =0; $counter < 4; $counter++) {
          echo $array[$counter];
        }
}

Jeg ved at man normalt skal bruge return til at afslutte funktionen, men jeg kan ikke finde ud af at placere den i Funktion 2. Hvis jeg bruger return istedet for echo i Funktion 2, så bliver dataene vist i den rigtige celle, men den viser kun den første værdi i arrayet, og kører altså ikke loopet igennem.
Avatar billede detox Nybegynder
05. maj 2004 - 20:34 #1
Måske kunne du ændre funktion 2 til:

Funktion 2:
--------------------------------
function vis_array($id) {
    $query="select ex_icon1, ex_icon2, ex_icon3 from exercise where id='$id'";
    $db = new database('mysql');
    $result=$db->query($query,"rows");
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        if ($row['ex_icon1'] == 1) {
            $icon1 = "<img src='ikon1.jpg'/>";
            $array[] = $icon1;
        }
        if ($row['ex_icon2'] == 1) {
            $icon2 = "<img src='ikon2.jpg'/>";
            $array[] = $icon2;
        }
        if ($row['ex_icon3'] == 1) {
            $icon3 = "<img src='ikon3.jpg'/>";
            $array[] = $icon3;
        }
    }
  return implode('', $array);
}
Avatar billede fgsupermand Nybegynder
05. maj 2004 - 20:37 #2
Så sæt array'et sammen til en tekst streng og returner den istedet

for ($counter =0; $counter < 4; $counter++) {
    $tekst &= $array[$counter];
}

return $tekst;
Avatar billede breon Nybegynder
05. maj 2004 - 20:40 #3
Yehaa!! Det virker, så smid lige et svar.

Jeg havde ikke lige tænkt på at bruge implode, så tak for hjælpen.
Avatar billede breon Nybegynder
05. maj 2004 - 20:42 #4
Hov, der er jo flere fisk i nettet :-) Men jeg brugte detox' løsning.
Avatar billede detox Nybegynder
05. maj 2004 - 20:46 #5
Ok, så ;O)
Avatar billede breon Nybegynder
05. maj 2004 - 20:46 #6
fgsupermand > Din løsning fungerer desværre ikke helt efter hensigten, den returner kun 0 istedet for at vise billederne. Men tak alligevel.
Avatar billede sostack Nybegynder
06. maj 2004 - 08:59 #7
for ($counter =0; $counter < 4; $counter++) {
    $tekst .= $array[$counter];
}
return $tekst;

virker måske bedre ??

//sostack
Avatar billede breon Nybegynder
06. maj 2004 - 09:20 #8
Ja...

for ($counter =0; $counter < 4; $counter++) {
    $tekst .= $array[$counter];
}
return $tekst;

... virker også fint, men jeg bruger nu stadig detox' løsning, da den bruger mindre kode.
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