Koitin kovasti googlailla, mutta joko minulla oli väärät hakusanat tai tästä ei oikeesti löydy mitään järkevää ohjeistusta vielä :D Haluaisin siis tulostaa tietokannasta tietystä sarakkeesta olevasta tekstistä vaikkapa ensimmäiset 15 sanaa.
"Tällainen esimerkki teksti tässä meneillään. Tämä on yli sen viisitoista, ja tästä tuleekin näkyviin vain osa teksistä jos ymmärrätte!"
= 19 sanaa
Tulostettaisiin vain:
"Tällainen esimerkki teksti tässä meneillään. Tämä on yli sen viisitoista, ja tästä tuleekin näkyviin vain..."
Miten saisin tämän siis toimimaan. Tällä hetkellä koodi, johon tämä pitäisi istuttaa, näyttää tältä:
$kysely = $yhteys->prepare(" SELECT *, asiakkaat.nimi AS asiakkaan_nimi FROM tapaukset INNER JOIN asiakkaat ON tapaukset.asiakas_id=asiakkaat.id WHERE tapaukset.hoidettu='0' ORDER BY tapaukset.kiireellisyys, tapaukset.lahetys_pvm "); $kysely->execute(array($id)); while ($rivi = $kysely->fetch()) { echo "<table class=\"taulukko\">"; echo "<tr><td class=\"kysyva\" width=\"30%\">Tilattu</td><td class=\"vastaava\" width=\"70%\">" . $rivi["lahetys_pvm"] . "</td></tr>"; echo "<tr><td class=\"kysyva\">Tilaaja</td><td class=\"vastaava\">"; if ($rivi["asiakas_id"] == 0) { echo $rivi["asiakas_nimi"];} else { echo $rivi["asiakkaan_nimi"]; } echo "</td></tr>"; echo "<tr><td class=\"kysyva\">Hevonen/hevoset</td><td class=\"vastaava\">" . $rivi["hevonen_nimi"] . ", <a href=\"" . $rivi["hevonen_url"] . "\" target=\"new\">sivut</a></td></tr>"; echo "<tr><td class=\"kysyva\">Kiireellisyys</td><td class=\"vastaava\">"; if ($rivi["kiireellisyys"] == 0) { echo "ei kiireellinen";} else { echo "<font color=\"red\">kiireellinen</font>";} echo "</td></tr><tr><td class=\"kysyva\">Oireet</td><td class=\"vastaava\">" . $rivi["oireet"] . "</td></tr>"; echo "</table><br />"; }
$rivi["oireet"] tietoa tulisi siis rajoittaa sanamäärän suhteen.
No pilkot vaikka explodella (koska kaikki kunnon koodarit käyttävät explode-funktioita) merkkijonon 15. välilyönnin kohdalta, ja jos silloinkin on liian monta kirjainta tekstipätkässä, pätkäset suoraan X kirjaimen kohdalta.
Lebe80, aijai täällä mää nauran itselleni kun en tuota tullut edes ajatelleeksi vaikka vasta tuolla yhdellä nettikurssilla explodea harjottelin :D Mulla on vaan ongelmana nyt se, että millä mää saan ne ensimmäiset viisitoista valittua? Kun tämä on kaikki mitä sain aikaan.
$lyhenne = explode(" ", $rivi["oireet"]);
Oon niin käsi vielä koodauksessa että ei mitään rajaa.
No vaikka jotenkin tälleen
Tämä koodi ottaa 15 ensimmäistä sanaa. Koodi voi kuitenkin toimia väärin, jos teksti sisältää esimerkiksi rivinvaihtoja.
$teksti = "..."; $sanat = explode(" ", $teksti); $alkusanat = array_slice($sanat, 0, 15); $alku = implode(" ", $alkusanat); // Sama kuin... $alku = implode(" ", array_slice(explode(" ", $teksti), 0, 15));
Sanamäärässä on kuitenkin sellainen ongelma, että sanat voivat olla pitkiä tai lyhyitä. Merkkimäärä on usein hyödyllisempi. Siinä auttavat säännölliset lausekkeet. Alla ovat lausekkeet vähintään ja enintään tietylle merkkimäärälle; tietyissä erityistapauksissa (esim. jos teksti on liian lyhyt tai ei sisällä sopivaa katkaisukohtaa) määristä kuitenkin poiketaan.
$teksti = "..."; $alle_80_merkkia = preg_replace('/(.{1,80})(\\s|$).*/s', '$1', $teksti); $yli_80_merkkia = preg_replace('/(.{80}.*?)(\\s|$).*/s', '$1', $teksti);
Aihe on jo aika vanha, joten et voi enää vastata siihen.