Seuraava koodi:
<?php $mjono="MAALAISTALO"; function tarkasta($sana){ if ($sana == strrev($sana)) { echo "1"; } else { echo "0"; } } $alku=0; $loppu=strlen($sana)-1; $sana=""; $pituus=0; $max=0; do{ $sana=substr($mjono,$alku,$loppu); //var_dump($sana); if(tarkasta($sana)===1){ $pituus=$loppu-$alku; } if($pituus>$max){ $max=$pituus; } $alku++; $loppu--; }while($alku!=$loppu); $alku=0; $loppu=strlen($sana)-1; $pituus=0; do{ $sana=substr($mjono,$alku,$loppu); if(tarkasta($sana)===1){ $pituus=$loppu-$alku; } if($pituus>$max){ $max=$pituus; } $alku++; var_dump($alku); //var_dump($loppu); }while($alku!=$loppu); $alku=0; $loppu=strlen($sana)-1; $pituus=0; do{ $sana=substr($mjono,$alku,$loppu); if(tarkasta($sana)===1){ $pituus=$loppu-$alku; } if($pituus>$max){ $max=$pituus; } $loppu--; }while($alku!=$loppu); echo $max;
var_dump($alku) alkaa aluksi neljä nollaa (siis 0000) ja sitten ykkösiä niin pitkään kunnes tulee aikakatkaisu. En ymmärrä, mikä maksaa? $alku++; pitäisi aina kasvattaa sen arvoa yhdellä, mutta se ilmeisestkin jotenkin nollaantuu?
Aika monta virhettähän tuossa on (äkkiseltään pisti silmään ainakin 5), mutta ikuisen loopin syy on lienee se että samanaikaisesti kasvatat alkua 1:llä ja pienennät loppua 1:llä ja ne eivät koskaan ole samat, jolloin looppisikaan ei koskaan pääty
Itse asiassa loopin ajokierroksilla arvot, joita vertaillaan taitaa olla seuraavat:
alku 1, loppu -2
alku 2, loppu -3
jne.
Jeps. Olimpa puusilmä. Muutin nyt niin, että läpikäydään niinkauan kuin $alku<$loppu.
Koodi tulostaa loputtomasti ykkösiä, koska tulostat niitä tarkasta-funktiossa ja ensimmäinen silmukka ei pääty koskaan. Toiseen silmukkaan asti ei koskaan edes päästä. Var_dump sitä paitsi tulostaisi myös muuttujan tyypin.
Haluat selvästi, että tarkasta-funktio palauttaa arvon. Käytä siis returnia ja ota myös selvää, mitä eroa on koodeilla if("1"==1)
sekä if("1"===1)
. Samalla kannattaa manuaalista tarkistaa, miten substr-funktio toimii ja miten kaikki virheilmoitukset saa päälle.
Koska kyseessä on PHP-haasteen tehtävä, saat itse miettiä, mikä vika itse hakualgoritmissa on.
Aihe on jo aika vanha, joten et voi enää vastata siihen.