Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP-haaste/tehtävä 27

Sivun loppuun

LCHawk [26.03.2014 15:38:58]

#

Eli kyseisssä tehtävässä mulla on ongelma. Yritin ratkaista sitä oheisella koodilla:

<?php
$sana1=$_REQUEST['sana1'];
$sana2=$_REQUEST['sana2'];
$onko=0;
$apu;
for($i=0;$i<strlen($sana2);$i++){
    if($i==0){
        $apu=strstr($sana1,$sana2[0]);
        if(!isset($apu)){
            $onko=0;
        }
        else{
            $onko=1;
        }
    }else{
        $apu=strstr($apu,$sana2[$i]);
        if(!isset($apu)){
            $onko=0;
        }else{
            $onko=1;
        }
    }
}
echo $onko;

Olen debuggaillut ja tiedän, että se ei toimi oikein ja se johtuu siitä, että tuohon viimeiseen if-koodin lohkoon ei mennä. Olenko ajatellut tuon strstr-funktion toiminnan jotenkin väärin? Eikö sen pitäisi antaa false- jos tuo sana2-muuttujan merkkijonon tietty kirjain ei sisälly tuohon apu-muuttujan sanaan?

Chiman [26.03.2014 16:53:31]

#

Funktio isset palauttaa falsen vain, jos sen argumenttina olevaa muuttujaa ei ole asetettu tai sen arvo on null. Edellisellä rivillä asetat $apulle arvon, joka ei koskaan ole null.

The Alchemist [26.03.2014 16:54:12]

#

No tulosta $apu-muuttujan arvo ja katso mitä siellä on. Ei se ole sen vaikeampaa. Miksi et itse debuggaa omaa koodiasi?

P.S. isset(false) === true.

Teuro [26.03.2014 18:28:04]

#

LCHawk kirjoitti:

Olen debuggaillut ja tiedän, että se ei toimi oikein ja se johtuu siitä, että tuohon viimeiseen if-koodin lohkoon ei mennä. Olenko ajatellut tuon strstr-funktion toiminnan jotenkin väärin? Eikö sen pitäisi antaa false- jos tuo sana2-muuttujan merkkijonon tietty kirjain ei sisälly tuohon apu-muuttujan sanaan?

Olet ehkä ymmärtänyt tehtävän hiukan pieleen. Tehtävässä pitää siis selvittää voidaanko ensimmäisestä sanasta muodostaa toinen sana vain poistamalla kirjaimia jälkimmäisestä sanasta. sana2 ei siis välttämättä ole sana1:n osajoukko.

PHP-haaste t27 kirjoitti:

$_REQUEST['sana1'] = "SUORAKULMIO";
$_REQUEST['sana2'] = "SALI";

Tuossahan sana SALI ei ole sanan SUORAKOLMIO osa suoraan, vaan välistä tulee sanasta tulee poistaa kirjaimia.

Metabolix [26.03.2014 18:56:38]

#

Teuro, koodin idea on kylläkin tuolta osin aivan oikea. Ainoat varsinaiset bugit ovat tuo isset ja se, että $apu-muuttujasta ei poisteta jo löytynyttä kirjainta ja esimerkiksi sanat ABC ja BBBBB menevät siksi läpi. Muutenkin koodissa on kyllä parantamisen varaa: se on pitkä ja siinä on turhaa toistoa.

LCHawk [26.03.2014 22:21:05]

#

The Alchemist:
Tulostelin sitä arvoa ja huomasin, että siellä on sisältöä. Ymmärsin tuon strstr-funktion käytön siten, että sillä voi tsekata sen, että se antaa falsen, jos merkkijonoa ei löydy. Huomasin itse, että näin ei ole. Olenko siis ymmärtänyt sen aivan täysin päin seiniä?

Metabolix [26.03.2014 22:35:54]

#

Olet ymmärtänyt jotain väärin, ja ilmeisesti et myöskään ole onnistunut testaamaan kovin hyvin. Kokeilepa vaikka näin:

<?php
var_dump(strstr("ABC", "A"));
var_dump(strstr("ABC", "B"));
var_dump(strstr("ABC", "C"));
var_dump(strstr("ABC", "D"));
$x = strstr("ABC", "D");
var_dump($x, isset($x));

Kuten sinulle jo selvästi sanottiin, isset ei sovi falsen tarkistamiseen. Jos haluat selvittää, onko muuttujassa false, käytä vertailuoperaattoria (===).

Grez [27.03.2014 06:03:08]

#

Toistan jo kerrottua asiaa mutta vähän eri sanoin..

isset antaa sinulle tietenkin tuossa tapauksessa vastaukseksi true. Pidemmin sanoin se kertoisi:

"yes, $apu is set (to value false)"

LCHawk [27.03.2014 11:32:35]

#

Kiitos näistä, nyt alan ymmärtää eli olen siis tajunnut issetin toiminnallisuuden väärin eli issetillä voikin tarkastaa esim. sitä, löytyykö jostain lukuja sisältävästä taulukosta vaikkapa arvoa 5 eikä tuon tyylistä juttuä.

Olen siis ymmärtänyt issetin toiminnallisuuden väärin.

Teuro [27.03.2014 12:13:43]

#

Ei sillä ihan tuotakaan voi tarkistaa siihen soveltunee paremmin in_array() funktio. Alla on pieni esimerkki issetistä. Sillä voit tarkistaa onko jotakin muuttujaa olemassa.

<?php
$a = Array(5, 6, 3, 7);

$maolenesitelty;
$mullaonarvo = 7;

echo (isset($a[5]) === true) ? "joo" : "ei"; //ei
echo (isset($a[1]) === true) ? "joo" : "ei"; //joo
echo (isset($eimuaole) === true) ? "joo" : "ei"; //ei
echo (isset($maolenesitelty) === true) ? "joo" : "ei"; //ei
echo (isset($mullaonarvo ) === true) ? "joo" : "ei"; //joo

The Alchemist [27.03.2014 12:49:03]

#

Turhapa sitä on arvuutella, kun kuvauksen voi lukea docseista.

lainaus:

isset — Determine if a variable is set and is not NULL

LCHawk [27.03.2014 14:00:40]

#

Jes! Sain näillä neuvoilla toimimaan. Kiitos kaikille!


Sivun alkuun

Vastaus

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

Tietoa sivustosta