Toon posts:

[PHP] Recursieve functie returned niks

Pagina: 1
Acties:
  • 31 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik heb de volgende functie welke naar een sluitingstag ">" zoekt en vervolgens kijkt of het volgende teken een openingstag "<" is. Als dat het geval is zoekt hij de volgende sluitingstag net zolang tot het volgende teken geen "<" is. Vervolgens moet hij dan dit teken returnen, maar dit doet hij dus niet, begrijp er niks van..

Iemand enig idee waarom hij niks returned?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function get_shit($tekst, $pos)
{
    $pos1 = strpos($tekst, ">", $pos);
    if ($pos1 != "false")
    {
        $test = substr($tekst, $pos1 + 1, 1);
        if ($test == "<")
        {
            get_shit($tekst, $pos1 + 1);
        }
        else
        {
            return $test;
        }
    }
}

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:09

Cyphax

Moderator LNX
Tja als $pos1 ongelijk is aan "false" doet ie niets. Je zet 1 regel daarboven neer dat $pos1 gelijk wordt aan de returnwaarde van strpos, en die zal niet gauw "false" zijn en daarmee de directe verklaring voor het feit dat 'ie niets retourneert.
Let er dus op dat je nu test op een string, een booleaanse false zet je niet tussen aanhalingstekens.

[ Voor 34% gewijzigd door Cyphax op 04-09-2006 14:52 ]

Saved by the buoyancy of citrus


Verwijderd

Topicstarter
Ok.. dat is duidelijk, heb hem iets versimpeld.. krijg nu echt nog steeds niks terug..

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function get_shit($tekst, $pos)
{   
    $pos1 = strpos($tekst, ">", $pos);
    $test = substr($tekst, $pos1 + 1, 1);
    if ($test == "<")
    {
        get_shit($tekst, $pos1 + 1);
    }
    else
    {
        return $test;
    }
}


Ligt het nou aan mij of moet hij nu gewoon de waarde van $test returnen als het geen < is?

$blaat was een foutje :)

[ Voor 4% gewijzigd door Verwijderd op 04-09-2006 15:09 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Probeer eens wat te debuggen? Output tussentijdse waardes van je variabelen eens? Dit is toch geen rocket science? En wij zijn er niet om je te helpen debuggen ;)

Hint: Wat doet $blaat? :Y)
3 seconden naar je code gekeken ;)

[ Voor 16% gewijzigd door RobIII op 04-09-2006 15:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
ja, das dus het gekke, als ik op de plek van de return de waarde echo dan komt hij netjes tevoorschijn... maar returnen ho maar..

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:09

Cyphax

Moderator LNX
Verwijderd schreef op maandag 04 september 2006 @ 15:07:
ja, das dus het gekke, als ik op de plek van de return de waarde echo dan komt hij netjes tevoorschijn... maar returnen ho maar..
Je doet ook niets met de returnwaarde van je functie.

Saved by the buoyancy of citrus


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Je roept de functie wel aan, maar je returnt zijn returnwaarde niet. De hele clou van recursieve functies is dat je de returnwaarde bovenop de stack terugkrijgt naar de uiteindelijke calling function. Verander in je laatste codevoorbeeld dus regel 7 eens in dit:
PHP:
7
        return get_shit($tekst, $blaat);


Probeer je eerst maar eens in te lezen in wat recursieve functies zijn, want dit staat echt wel beschreven in elk boek over algoritmeontwerp.

[ Voor 19% gewijzigd door NMe op 04-09-2006 15:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
die returnwaarde wordt in een andere pagina gevuld...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Even nadenken. Nadat regel 7 wordt aangeroepen, wat gebeurt er dan?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Tja. Dit wordt me toch een beetje teveel een "hou mij eens aan mijn handje"-topic. Je zult zelf moeten debuggen en zo complex is dit ook weer niet ;) Gezien je eigen inzet dus maak ik hier een einde aan ;)

Er zijn inmiddels voldoende hints/tips gegeven om het op te lossen :Y) Doe er je voordeel mee ;)

[ Voor 34% gewijzigd door RobIII op 04-09-2006 15:38 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.