|
| 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
| |
|
|