Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Taulukosta hakeminen

Pallo [15.05.2008 12:57:06]

#

Minulla on seuraavanlainen taulukko:

<?php
$array = array("tietokone", "näyttö");
?>

Nyt pitäisi saada selville, löytyykö tuosta $array muuttujan taulukosta
esim. "kone" sanaa. (Tässä tapauksessa löytyy.)
Antakaas vinkkejä kuinka tuollainen haku onnistuisi :)

Antti Laaksonen [15.05.2008 13:05:39]

#

Yksi ratkaisu on käydä taulukko läpi ja tutkia joka sanan kohdalla, sisältääkö se hakusanan.

<?php
$sanat = array("tietokone", "näyttö");
$haku = "kone";
$maara = 0;
foreach ($sanat as $sana) {
    if (substr_count($sana, $haku)) {
        $maara++;
        echo "Löytyi: " . $sana . "<br>";
    }
}
if ($maara == 0) {
    echo "Ei löytynyt!<br>";
}
?>

Pallo [15.05.2008 13:06:52]

#

Kiitos paljon! ;)

ajv [15.05.2008 14:04:48]

#

PHP tarjoaa lähes kaikkeen valmiin funktion, myös tähän: array_search() :)

tsuriga [15.05.2008 16:00:27]

#

Täsmennyksenä edelliseen: array_search-funkkaria voidaan käyttää siis silloin kun halutaan etsiä täydellistä avainta. Tässä kuitenkin haetaan merkkijonoa myös merkkijonojen sisältä, jolloin oma vertailu on tarpeen. Substr_countin tilalla lienee tässä tilanteessa kuitenkin parempi käyttää str(i)posia. Ellei sitten sanan useammat esiintymiskerrat samassa taulukon indeksissä lasketa kaikki erikseen.

ajv [15.05.2008 19:15:09]

#

tsuriga kirjoitti:

Täsmennyksenä edelliseen: array_search-funkkaria voidaan käyttää siis silloin kun halutaan etsiä täydellistä avainta. Tässä kuitenkin haetaan merkkijonoa myös merkkijonojen sisältä, jolloin oma vertailu on tarpeen.

Ah, totta. Mitä lie mielessäni liikkunut, kun en tuota tajunnut :)

Antti Laaksonen [15.05.2008 21:56:21]

#

Tässä vielä vaihtoehtoinen ratkaisu ilman silmukoita:

<?php
$sanat = array("tietokone", "näyttö");
$haku = "kone";
$ehto = create_function("\$sana", "return substr_count(\$sana, \"$haku\");");
$tulos = array_filter($sanat, $ehto);
if (count($tulos) == 0) {
    echo "Ei löytynyt!<br>";
} else {
    echo "Löytyi: " . join("<br>Löytyi: ", $tulos) . "<br>";
}
?>

(Käytän funktiota substr_count, jotta ei tarvitse huolehtia muuttujatyypeistä.)

Vastaus

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

Tietoa sivustosta