/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Rigtigt rekursivt (variabel problem)
Fra : Mads Pedersen


Dato : 24-01-02 02:53

OK, det lykkedes at få funktionen til at virke, men jeg kan ikke få data UD
fra funktionen. Se her:

function findit($string) {
static $newstring = "";
$lpos = strpos ($string, "[L]");
if ($lpos === false) {
$continue=false;
$newstring=$newstring.$string;
echo "STRINGCOMPLETE: $newstring<br>"; // HER ER VÆRDIEN AF
$NEWSTRING OK
return $newstring; // HER SKULLE FUNKTIONEN RETURNERE $NEWSTRING
} else {
$ldpos = strpos ($string, "[LD]");
$continue=true;
}
if ($continue==TRUE) {
$newstring = $newstring.substr("$string", 0, ($lpos+3));
$url = isurl(substr($string, ($lpos+3), ($ldpos-($lpos+3))));
$newstring = $newstring.$url.substr($string, ($ldpos), (4));
$string=substr($string, ($ldpos+4));
findit($string);
}
}

$string = findit($string); // HER KALDES FUNKTIONEN

// MEN I FLG. LINIE ER $STRING TOM
echo "STRINGCOMPLETE_OUTSIDE: $string";

Er der nogen som kan fortælle mig hvorfor?

// Mads
----------------------------------
..: http://www.madspedersen.com


 
 
Lars Petersen (24-01-2002)
Kommentar
Fra : Lars Petersen


Dato : 24-01-02 04:02

> function findit($string) {
> static $newstring = "";
> $lpos = strpos ($string, "[L]");
> if ($lpos === false) {
> $continue=false;
> $newstring=$newstring.$string;
> echo "STRINGCOMPLETE: $newstring<br>"; // HER ER VÆRDIEN AF
> $NEWSTRING OK
> return $newstring; // HER SKULLE FUNKTIONEN RETURNERE $NEWSTRING
> } else {
> $ldpos = strpos ($string, "[LD]");
> $continue=true;
> }
> if ($continue==TRUE) {
> $newstring = $newstring.substr("$string", 0, ($lpos+3));
> $url = isurl(substr($string, ($lpos+3), ($ldpos-($lpos+3))));
> $newstring = $newstring.$url.substr($string, ($ldpos), (4));
> $string=substr($string, ($ldpos+4));
> findit($string);
> }
> }

Prøv at indsætte denne linie lige efter function:

global $continue;

og sæt $continue til true før du kalder funktionen.


--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
http://wshlman.moons.dk/ - Say goodbye to GameSpy - A Free Half Life
Manager!
When mailing me, remember there is no truth in my mail!



Mads Pedersen (24-01-2002)
Kommentar
Fra : Mads Pedersen


Dato : 24-01-02 10:29

in article YOK38.3335$Eu2.522406@news010.worldonline.dk, Lars Petersen at
lars@TRUTHioflux.net wrote on 24/01/02 4:02:

>> function findit($string) {
>> static $newstring = "";
>> $lpos = strpos ($string, "[L]");
>> if ($lpos === false) {
>> $continue=false;
>> $newstring=$newstring.$string;
>> echo "STRINGCOMPLETE: $newstring<br>"; // HER ER VÆRDIEN AF
>> $NEWSTRING OK
>> return $newstring; // HER SKULLE FUNKTIONEN RETURNERE $NEWSTRING
>> } else {
>> $ldpos = strpos ($string, "[LD]");
>> $continue=true;
>> }
>> if ($continue==TRUE) {
>> $newstring = $newstring.substr("$string", 0, ($lpos+3));
>> $url = isurl(substr($string, ($lpos+3), ($ldpos-($lpos+3))));
>> $newstring = $newstring.$url.substr($string, ($ldpos), (4));
>> $string=substr($string, ($ldpos+4));
>> findit($string);
>> }
>> }
>
> Prøv at indsætte denne linie lige efter function:
>
> global $continue;
>
> og sæt $continue til true før du kalder funktionen.

Det er ikke problemet. Funktionen virker fint, resultatet er rigtigt og kan
skrives ud INDENI funktionen, men jeg ken ikke få funktionen til at
returnere $newstring så den virker UDENFOR funktionen.

// Mads
----------------------------------
..: http://www.madspedersen.com
..: http://www.doubleloop.com


Jakob Kirkegaard (24-01-2002)
Kommentar
Fra : Jakob Kirkegaard


Dato : 24-01-02 11:22

Thursday 24 January 2002 02:53 skrev Mads Pedersen:

> OK, det lykkedes at få funktionen til at virke, men jeg kan ikke få
> data UD fra funktionen. Se her:
>
> Er der nogen som kan fortælle mig hvorfor?

Prøv at ændre linjen hvor du laver det rekursive kald til:

return findit($string);

Jeg mener det løste et lignende problem jeg havde engang.

--
mvh Jakob Kirkegaard

Mads Pedersen (24-01-2002)
Kommentar
Fra : Mads Pedersen


Dato : 24-01-02 11:56

in article a2on6t$477$1@sunsite.dk, Jakob Kirkegaard at jkir00@kom.auc.dk
wrote on 24/01/02 11:21:

> Thursday 24 January 2002 02:53 skrev Mads Pedersen:
>
>> OK, det lykkedes at få funktionen til at virke, men jeg kan ikke få
>> data UD fra funktionen. Se her:
>>
>> Er der nogen som kan fortælle mig hvorfor?
>
> Prøv at ændre linjen hvor du laver det rekursive kald til:
>
> return findit($string);
>
> Jeg mener det løste et lignende problem jeg havde engang.

Jakob,

Du er simpelthen EN HELT - det var lige det der skulle til!!!

Tak for hjælpen!

// Mads
----------------------------------
..: http://www.madspedersen.com


Jakob Møbjerg Nielse~ (25-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 25-01-02 02:45

> Du er simpelthen EN HELT - det var lige det der skulle til!!!

Lidt yderligere info: Det er dette der kaldes en halerekursiv funktion.
Rekursive funktioner kan være svære at overskue hvis man er vant til
imperativ programmering, men hvis begynder at lege med funktionel
programmering, bliver det hurtigt en vanesag. Halerekursive funktioner
kan desuden nemt skrives om til løkker:

function findit($string) {
$newstring = "";
$lpos = strpos ($string, "[L]");
while ($lpos != false) {
$ldpos = strpos ($string, "[LD]");
$newstring = $newstring.substr("$string", 0, ($lpos+3));
$url = isurl(substr($string, ($lpos+3), ($ldpos-($lpos+3))));
$newstring = $newstring.$url.substr($string, ($ldpos), (4));
$string=substr($string, ($ldpos+4));
$lpos = strpos ($string, "[L]");
}
$newstring=$newstring.$string;
echo "STRINGCOMPLETE: $newstring<br>";
return $newstring;
}

Koden er ikke testet.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Jakob Møbjerg Nielse~ (25-01-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 25-01-02 03:04

> OK, det lykkedes at få funktionen til at virke, men jeg kan ikke få
data
> UD fra funktionen. Se her:

Hov, så lige dit oprindelige spørgsmål. Gå efter metoden med det
regulære udtryk. Det er MEGET pænere og det skulle ikke undre mig om det
brugte mindre processorkraft på computeren.

--
Jakob Møbjerg Nielsen
jakob@dataloger.dk
"Hey! He reminds me of someone who looks just like him. - Me"



Mads Pedersen (25-01-2002)
Kommentar
Fra : Mads Pedersen


Dato : 25-01-02 10:42

in article a2qed6$m2f$1@sunsite.dk, Jakob Møbjerg Nielsen at
jakob@dataloger.dk wrote on 25/01/02 3:04:

>> OK, det lykkedes at få funktionen til at virke, men jeg kan ikke få
> data
>> UD fra funktionen. Se her:
>
> Hov, så lige dit oprindelige spørgsmål. Gå efter metoden med det
> regulære udtryk. Det er MEGET pænere og det skulle ikke undre mig om det
> brugte mindre processorkraft på computeren.

Hehe tak, men de regulære udtryk er lidt langhårede og funktionen skal ikke
køre så tit

// Mads
----------------------------------
..: http://www.madspedersen.com


Søg
Reklame
Statistik
Spørgsmål : 177506
Tips : 31968
Nyheder : 719565
Indlæg : 6408562
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste