Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] skracanie ciągu znaków ale po lub przed spacją.
Forum PHP.pl > Forum > Przedszkole
bobo168
Witam. Mam nastepujący problem. Powiedzimy że mamy zmienną opis:
  1. <?php
  2. $opis = 'lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus';
  3. ?>

I w jaki sposób skrócić ten ciąg znaków powiedzmy po 27 znaków ale do takiej formy żeby nie przycinało mi wyrazu ale skracał się dopiero po spacji. np. żeby nie wyglądało to tak:
lorem impus lorem impus lor
tylko tak:
lorem impus lorem impus lorem

Z góry dzięki za pomoc smile.gif
parzygnat
Myślę, że rozwiązań może być kilka ja proponuję Ci zacząć od sprawdzenia tej funkcji
http://php.net.pl/manual/pl/function.explode.php

  1. <?php
  2. $opis  = "lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem";
  3. $pieces = explode(" ", $opis);  // tu otrzymasz kawalki pocietego stringu przez 'spacje' (czyli w tablicy beda napisy lorem impus itd...)
  4. //nastepnie musisz to polaczyc oddzielajac znowu spacja i wszystko umiesc w petli a warunkiem niech bedzie dlugosc stringu czyli
  5. //strlen($opis_pociety);
  6. $opis_pociety = $pieces[0]." ".$pieces[1];
  7. ?>
sowiq
  1. <?php
  2. function zajawka($txt, $dlugosc_zajawki){
  3.    if(strlen($txt) <= $dlugosc_zajawki)
  4.        return $txt;
  5.  
  6.    while($txt{$dlugosc_zajawki} != ' ' && strlen($txt) > $dlugosc_zajawki)
  7.        ++ $dlugosc_zajawki;
  8.  
  9.    $str = substr($txt, 0, $dlugosc_zajawki);
  10.  
  11.    if(strlen($txt) > $dlugosc_zajawki){
  12.        $str .= "&hellip;";
  13.    }
  14.  
  15.    return $str;
  16. }
  17.  
  18. echo zajawka($loremIpsum, 20);
  19. ?>
winksmiley.jpg
ddiceman
wordwrap()
parzygnat
Tu masz gotowca sprawdzilem wszytko chula smile.gif
  1. <?php
  2. $opis  = "lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem impus lorem";
  3. $pieces = explode(" ", $opis);
  4. $ile_wyrazow = count($pieces);
  5. $opis_pociety = array();
  6. $buffor = "";
  7. for($i = 0; $i<$ile_wyrazow; $i += 1){
  8.    $buffor .= $pieces[$i]." ";
  9.    if(strlen($buffor) >= 27){
  10.        $opis_pociety[] = $buffor;   // w tej tablicy przechowywane sa koncowe pociete string'i i pozniej do niej sie odwoluj
  11.        $buffor = "";
  12.    }
  13. }
  14. ?>
sowiq
@parzygnat,
po cholerę na siłę wymyślać nieoptymalne (i IMO jedno z gorszych*) rozwiązań, skoro ddiceman podał gotową funkcję?

Ja się przyznaję bez bicia, że nie znałem wordwrap() wstydnis.gif

* wyobraź sobie, że masz wyciąć 200 pierwszych znaków z całej książki...
gregiolo
Witam Państwa,
Oto co udało mi się stworzyć na prędce. Generalnie działa jak powinno.
  1. function cutString($string, $size) {
  2. $str = wordwrap($string, $size, "...");
  3. $pos = strpos($str, "...");
  4. return substr($str, 0, $pos+3);
  5. }


Pozdrówka

Gw.
http://webinprogress.pl
piotrooo89
aleś odgrzebał suchara.
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.