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