Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ciekawa obróbka stringa
kardynalek3
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 12.09.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




http://pl.php.net/manual/en/function.wordwrap.php
A jak ci będzie mało to poczytaj komentarze
Go to the top of the page
+Quote Post
Rid
post
Post #3





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Rid 12.09.2011, 13:24:18
Go to the top of the page
+Quote Post
tehaha
post
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
elektrrrus
post
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 18
Dołączył: 11.06.2007
Skąd: Koszalin/Poznań

Ostrzeżenie: (0%)
-----


@Rid - za dużo kombinacji.
Wystarczy kombinacja substr i strpos albo wordwrap.
Go to the top of the page
+Quote Post
Rid
post
Post #6





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/sad.gif) (IMG:style_emoticons/default/php.gif)
Twój przykład wydaje mi się lepszy.
Go to the top of the page
+Quote Post
kardynalek3
post
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 12.09.2011

Ostrzeżenie: (0%)
-----


Dzięki wielkie. Poszło delikatnie zmodyfikowane trimText (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Rid
post
Post #8





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

Ostrzeżenie: (0%)
-----


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. (IMG:style_emoticons/default/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";

Ten post edytował Rid 12.09.2011, 23:28:12
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 16:57