Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ciekawa obróbka stringa
Forum PHP.pl > Forum > PHP
kardynalek3
Witam
Potrzebuję obrobić stringa ale w taki sposób, żeby ucinało go na spacji znajdującej się jak najbliżej N-tego znaku. Czyli mam powiedzmy tekst mający 300 znaków a muszę pobrać ok 200 znaków ale sensownej treści (bez urwanego w połowie słowa na końcu stringa). Z góry dziękuję za pomoc
nospor
http://pl.php.net/manual/en/function.wordwrap.php
A jak ci będzie mało to poczytaj komentarze
Rid
Musisz podzielić stringa na tablicę wyrazów,potem przepuścić przez pętlę która zlicza ilość znaków wyrazu z tablicy,jeśli nie przekracza 200
znaków ,dodajesz kolejny wyraz z tablicy i zliczasz od nowa.
tehaha
Cytat
Musisz podzielić stringa na tablicę wyrazów,potem przepuścić przez pętlę która zlicza ilość znaków wyrazu z tablicy,jeśli nie przekracza 200
znaków ,dodajesz kolejny wyraz z tablicy i zliczasz od nowa.

wydaje mi się, że to za bardzo przekombinowany sposób i przy dłuższym tekście może być nie wydajny

- osobiście używam kombinacji funkcji strlen, strpos, i substr
- ucina tekst na spacji, zwraca tekst nie dłuższy niż podana maksymalna długość

  1. public function trimText($text, $length)
  2. {
  3. $text = trim($text);
  4. if(strlen($text)>$length)
  5. {
  6. $short = substr($text, 0, $length);
  7. $marker = strrpos($short, ' ');
  8. $cut = substr($short, 0, $marker);
  9. return $cut . "...";
  10. }
  11. else return $text;
  12. }
elektrrrus
@Rid - za dużo kombinacji.
Wystarczy kombinacja substr i strpos albo wordwrap.
Rid
Cytat
wydaje mi się, że to za bardzo przekombinowany sposób i przy dłuższym tekście może być nie wydajny

Robię to samo w C# ,czemu operacje na stringach nie są tak łątwe jak w php sad.gif php.gif
Twój przykład wydaje mi się lepszy.
kardynalek3
Dzięki wielkie. Poszło delikatnie zmodyfikowane trimText smile.gif
Rid
tehaha, muszę też Tobie podziękować,ten sposób działa świetnie.Udało mi się przerobić na c#.Miałem lekki problem ze
znalezieniem equiwalentu strrpos w c#,ale last indexOf zrobił swoje.Dziwne ,że nie mogłem nigdzie znaleźć takiego sposobu w C# tylko zawiłe kluczki z tablicami znaków.Nikt mi teraz nie powie ,że nie warto obserwować tematów ,na innych forach. rsc.gif

Ma tylko drobną wadę jak ucinamy po np 20 znaku,a pierwszy wyraz jest dłuższy niż 25 znaków to wywala całego stringa i zwraca samo ".....",przynajmniej u mnie tak działa ,ale da rady przeżyć nikt poważny,chyba nie będzie wpisywał 100 x "a";
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.