Kun skripti sekoittaa sanan str_shuffle
funktiolla, se tallentaa sekoitetun sanan tiedostoon.
Kuinka olisi mahdollista lisätä skriptiin kohta, jossa
sanaa sekoitetaan niin kauan, kunnes samanlaista sanaa ei löydy tiedostosta ?
Olen yrittänyt vääntää do-while
sekoilulla jotain, mutta ei ota onnistuakseen.
// luetaan tiedostosta sanat $sanat[]-taulukkoon do { $sana = str_shuffle($sana); while (/* $sanaa ei löydy $sanat[]-taulukosta */); // kirjoita $sana tiedostoon
Sovelsin vähän tuota esimerkkiä ja sainkin jotain aikaan.
Mutta tietenkään oma viritykseni ei toimi. Mikä tässä mättää?
<?php $filu = file_get_contents('sanat.txt'); $etsi = strpos($filu, $sana); do { $sana = str_shuffle($_GET['sana']); } while ($etsi === false); echo $sana; ?>
Laita tuo etsiminen str_shufflen jälkeen do...while-silmukan sisälle, koska nyt tuossa etsintä suoritetaan ennen sanan sekoitusta.
Oookei, mutta edelleenkään skripti ei ota toimiakseen.
Kun etsii sanalla, skripti jää jurraamaan paikalleen. Jokin on pielessä, mutta mikä?
<?php $filu = file_get_contents('sanat.txt'); do { $sana = str_shuffle($_GET['sana']); $etsi = strpos($filu, $sana); } while ($etsi === false); echo $sana; ?>
Eikös tuo whilen ehto ole juurikin väärin päin, eli pitäisi olla while($etsi != false); ?
Nyt skripti näyttää kyllä jotain, mutta se ei välitä vaikka tiedostossa on
jo sana mikä saatiin kun sekoitettiin syötetty sana. :S En näe itse ainuttakaan vikaa?
<?php $filu = file_get_contents('sanat.txt'); do { $sana = str_shuffle($_GET['sana']); $etsi = strpos($filu, $sana); } while ($etsi != false); echo $sana; ?>
Vertailusta puuttuu yksi yhtäsuuruusmerkki, eli vaihda != -> !==.
Tämä siksi, koska muuten tiedostossa ensimmäinen sana ei kelpaa, sillä strpos palauttaa arvon nolla (0), jolloin tuo vertailu "!=" sanoo, että se olisi sama kuin "false".
Hieman epäselvä selitus, mutta ...
Nyt toimii, kiitti paljon kaikille auttaneille ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.