Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ucina bezlitośnie ciąg, jak zrobić, żeby nie, ucinal wyrazów, a zostawiał cały wyraz?
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


mam takie coś:

  1. <?php
  2. $text = "Microsoft zapowiedział wprowadzenie usługi przedpłaconych.";
  3. $stop = "5";
  4. $liczbaSlow = count(preg_split('/W+/', $text, -, PREG_SPLIT_NO_EMPTY));
  5. $wstep = substr($text,0,$stop);
  6. if($liczbaSlow > $stop) {
  7. echo $wstep." jakiś link do czytaj więcej...";
  8. }
  9. else {
  10.     echo $text;
  11. }
  12. ?>


jak zrobić, żeby mi nie ucinał wyrazu w środku, tylko zawsze wyświetlał np 10 wyrazów a na 11 ucinał, tylko zostawiając 10-ty wyraz w całości...

dzięki

Ten post edytował miedzna 15.12.2005, 16:25:48
Go to the top of the page
+Quote Post
bregovic
post
Post #2





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Np tak:
  1. <?php
  2. $text = "Microsoft zapowiedział wprowadzenie usługi przedpłaconych.";
  3. $stop = 2;
  4. $slowa = explode(' ', $text);
  5.  
  6. if(count($slowa) > $stop)
  7. {
  8. for($i = 0; $i <= $stop; $i++)
  9. {
  10. echo $slowa[$i].' ';
  11. }
  12. echo "link";
  13. }
  14. else
  15. {
  16. echo $text;
  17. }
  18. ?>


Ale jestem pewien że można to zrobić bardziej optymalnie - tylko nie mam teraz czasu żeby myśleć.


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
splatch
post
Post #3





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Klasa \b bądź \B jest odpowiedzialna za koniec wyrazu.


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post
hwao
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




substr" title="Zobacz w manualu php" target="_manual()

w komentarzach masz smile.gif (nawet taki co html nie tnie winksmiley.jpg )
  1. <?php
  2. function myfragment($s,$n) {
  3.  $scan=0;
  4. while($scan==0){
  5.  if(substr($s,$n,1)==' '){
  6.  $scan=1;
  7.  }else{
  8.  $n++;
  9.  }  
  10. }
  11. return substr($s,0,$n) . "...";
  12. }
  13. ?>


Popatrz na komentarze
Go to the top of the page
+Quote Post
splatch
post
Post #5





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


Tak jak mówiłem - można zrobić to przy użyciu wyrażeń regularnych. Będą one na pewno szybsze niż pętle.
  1. <?php
  2.  
  3. $string = "to jest bardzo wazny tekst";
  4. $after = 10;
  5.  
  6. // wytłumaczenie wyrażenia ;)
  7. // [dowolne znaki]{występujące x razy}[dowolne znaki występujące 0 i więcej razy][
    granica słowa]
  8. preg_match('/.{'.$after.'}.*?b/ms',$string,$m);
  9.  
  10. // spodziewany wynik
  11. // $m[0] = 'to jest bardzo';
  12.  
  13. ?>


Jeszcze prostszy odpowiednik
  1. <?php
  2.  
  3. $string = 'To jest bardzo wazny tekst';
  4. $after = 9;
  5.  
  6. echo substr($string,0,strpos($string,' ',$after));
  7. ?>


Ten post edytował splatch 16.12.2005, 09:49:10


--------------------
Łukasz Dywicki
Independent Java and open source software consultant.
Blog - Java, OSGi, integracja oprogramowania..
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 18:04