Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ucina bezlitośnie ciąg, jak zrobić, żeby nie
Forum PHP.pl > Forum > PHP
miedzna
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
bregovic
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ć.
splatch
Klasa \b bądź \B jest odpowiedzialna za koniec wyrazu.
hwao
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
splatch
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. ?>
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.