Avatar billede sjh Nybegynder
26. november 2004 - 09:50 Der er 13 kommentarer og
1 løsning

Rekursiv funktion

Jeg har prøvet om jeg kunne lave den her.. http://www.html.dk/scripts/asp/00015/

men jeg syntes ikke den funker helt..


<?php
  $conn = mysql_connect(HOST, USER, PASS);
  mysql_select_db(DB);
?>
<?php
  $sqlResult = mysql_query("SELECT * FROM entries");
  if ($sqlResult) {
    $i = 0;
    while($row = mysql_fetch_array($sqlResult)) {
      $arrID[$i] = $row["ID"];
      $arrRE[$i] = $row["RID"];
      $arrSU[$i] = $row["Subject"];
      $i++;
    }
  }
?>
<?php
  function Threads($intID, $arrID, $arrRE, $arrSU) {
    $intLength = count($arrID);
    for ($i = 0; $i <= $intLength; $i++) {
      if ($arrRE[$i] == $intID) {
        return "<ul><li>".$arrSU[$i].Threads($arrID[$i], $arrID, $arrRE, $arrSU)."</li></ul>";
      }
    }
  }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title>Rekursiv funktion</title>
  </head>
  <body>
    <? echo Threads(0, $arrID, $arrRE, $arrSU); ?>
  </body>
</html>

nogle som lige kan se fejlen..
Avatar billede exp Juniormester
26. november 2004 - 10:01 #1
Der er et eksempel der virker her:
www.eksperten.dk/spm/531141
Avatar billede jaw Nybegynder
26. november 2004 - 10:03 #2
Indeholder din count($arrID); en værdi?
Avatar billede sjh Nybegynder
26. november 2004 - 10:05 #3
ja det må den jo gøre når det er count af et array
Avatar billede jaw Nybegynder
26. november 2004 - 10:06 #4
Jow, jow, min fejl...
Avatar billede sjh Nybegynder
26. november 2004 - 10:07 #5
som jeg ser det så er det som om den stopper når den kommer her til..

return "<ul><li>".$arrSU[$i].Threads($arrID[$i], $arrID, $arrRE, $arrSU)."</li></ul>";
Avatar billede jaw Nybegynder
26. november 2004 - 10:12 #6
Kan du give et par eksempler på hvad dine arrays indeholde? De test's jeg har lavet, som jeg tror de ser ud, virker fint...
Avatar billede sjh Nybegynder
26. november 2004 - 10:17 #7
Array $arrID[]
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array $arrRE[]
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 2
    [4] => 1
)
Array $arrSU[]
(
    [0] => Test 1
    [1] => Test 2
    [2] => Test 3
    [3] => Test 4
    [4] => Tesr 5
)
Avatar billede jaw Nybegynder
26. november 2004 - 10:25 #8
Er det så ikke den her det går galt i? :

  if ($arrRE[$i] == $intID) {
  }

Din $intID vokser jo: 1, 2, 3, 4 da den er tilsvarende til din $arrID, hvorimod din $arrRE[] ikke nødvendigvis vokser. For de første 3 trin indtil den bør gå "tilbage igen", virker fint hos mig...
Avatar billede sjh Nybegynder
26. november 2004 - 10:25 #9
jaw > du kan se tabellen i bunden

http://www.html.dk/scripts/asp/00015/ (Tabellen som anvendes til dette eksempel)
Avatar billede sjh Nybegynder
26. november 2004 - 10:29 #10
skulle det ikke være det samme da..?? (dog hedder min i og ikke m)

if ($arrRE[$i] == $intID) {
}

If Cint(arrRE(m)) = Cint(intID) Then
End If
Avatar billede sjh Nybegynder
26. november 2004 - 10:34 #11
det er måske min browser som er fu..
virker det her..

http://new.sjhdata.dk/menu/entries.php

jeg ser det sådan..

Test 1
  Test 2
    Test 3

men den skulle vel se såadn ud

Test 1
  Test 2
    Test 3
    Test 4
  Test 5
Avatar billede jaw Nybegynder
26. november 2004 - 10:40 #12
Ja, netop... Men de 3 første funger jo også som de skal? Der hvor det går galt er i de sidste 2:

$arrRE[3] = 2; <=> $intID
$arrID = 3;

if($arrRE[$i] == $intID) {    <=> if(2 == 3) {

Det duer jo ikke...?
Avatar billede sjh Nybegynder
26. november 2004 - 10:45 #13
hvordan kan de så få det til at virke??
http://www.html.dk/scripts/asp/00015/table.png
Avatar billede sjh Nybegynder
26. november 2004 - 12:16 #14
Nu virker det :D

http://new.sjhdata.dk/menu/entries.php

man kan altså bare ikke bruge: return "<ul><...
man skal opsamle det i fx $strOut og så skal der træket 1 fra count(...) -1

<?php
  function Threads($intID, $arrID, $arrRE, $arrSU) {
    $intLength = count($arrID) -1;
    for ($i = 0; $i <= $intLength; $i++) {
      if ($arrRE[$i] == $intID) {
        $strOut .= "<ul><li>".$arrSU[$i].Threads($arrID[$i], $arrID, $arrRE, $arrSU)."</li></ul>";
      }
    }
    return $strOut;
  }
?>
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