Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Php sanan sekoittaminen kunnes...

Sivun loppuun

Pallo [02.03.2008 19:18:55]

#

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.

TsaTsaTsaa [02.03.2008 19:23:18]

#

// luetaan tiedostosta sanat $sanat[]-taulukkoon
do
{
  $sana = str_shuffle($sana);
while (/* $sanaa ei löydy $sanat[]-taulukosta */);

// kirjoita $sana tiedostoon

Pallo [02.03.2008 19:46:17]

#

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;

?>

TsaTsaTsaa [02.03.2008 19:53:14]

#

Laita tuo etsiminen str_shufflen jälkeen do...while-silmukan sisälle, koska nyt tuossa etsintä suoritetaan ennen sanan sekoitusta.

Pallo [02.03.2008 20:02:40]

#

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;

?>

TsaTsaTsaa [02.03.2008 20:06:27]

#

Eikös tuo whilen ehto ole juurikin väärin päin, eli pitäisi olla while($etsi != false); ?

Pallo [02.03.2008 20:31:04]

#

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;

?>

Legu [02.03.2008 20:59:22]

#

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

Pallo [02.03.2008 21:06:04]

#

Nyt toimii, kiitti paljon kaikille auttaneille ;)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta