[PHP] Jak zrobić kilkuwyrazową zajawkę tekstu, który jest znacznie dłuższy i nie może być pokazany w całości?
Chcesz aby na stronie WWW zamiast całego, długiego zdania lub tekstu pojawiło się tylko kilka jego pierwszych wyrazów, np. "To jest przykładowe zdanie..." (reszty oczywiście nie widać). To bardzo częste rozwiązanie stosowane jest do pokazywania zajawek całego artykułu lub wypowiedzi na forum.
Z każdego tekstu bardzo łatwo można "wyciągnąć" dowolną ilość początkowych wyrazów. Oto uniwersalna procedura, która umożliwi Ci wybranie ile pierwszych wyrazów ze zdania (lub z pliku) chcesz pokazać:
<?
$zdanie="To jest przykładowe zdanie zawierające znacznie
więcej wyrazów niż chcemy pokazać na stronie WWW.";
function przytnij($zdanie,$ile) {
$slowa=explode(" ",$zdanie);
if ($ile>=count($slowa)) {$ile=count($slowa);}
else {$dod="...";}
for($i=0;$i<$ile;$i++) $odp .= " ".$slowa[$i];
return "$odp$dod";
}
echo przytnij($zdanie,4);
?>
Zasada działania procedury wykorzystuje rozbicie tekstu na wyrazy, gdzie separatorem każdego wyrazu jest spacja. Tablica $slowa zawiera teraz zamiast całego tekstu, poszczególne słowa. W pętli pobieramy kilka pierwszych wyrazów (w przykładzie cztery) i dodajemy do nich trzy kropki (równie dobrze może to być strzałka lub napis [więcej...]).
Do procedury przekazywane jest zdanie i liczba wyrazów, które chcesz pokazać. W wypadku, gdy podana liczba wyrazów jest większa lub równa liczbie wyrazów w zdaniu, procedura zwraca cały tekst, bez dodatkowych trzech kropek.
Jeżeli chcesz pobierać tekst z pliku, zamiast przypisywać do zmiennej $zdanie jakiś tekst, pobierz go z pliku następująco:
$f = fopen("plik.txt", "r");
$zdanie = fread($f, 1000);
fclose($f);
Liczba 1000 określa ile znaków zostanie pobranych. Myślę, że więcej jak tysiąc nie będzie konieczne, a możesz ustawić nawet mniej. Jeżeli plik jest krótszy niż zadeklarowana liczba nic się nie stanie - do zmiennej $zdanie trafi po prostu cały plik.