Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [PHP] skracanie ciągu znaków ale po lub przed spacją.
bobo168
post 26.11.2008, 22:06:48
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 9
Dołączył: 23.08.2006

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


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
Go to the top of the page
+Quote Post
parzygnat
post 26.11.2008, 22:23:39
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 6
Dołączył: 31.12.2007
Skąd: Poznań

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


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. ?>
Go to the top of the page
+Quote Post
sowiq
post 26.11.2008, 22:31:50
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


  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
Go to the top of the page
+Quote Post
ddiceman
post 26.11.2008, 22:36:30
Post #4





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

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


wordwrap()
Go to the top of the page
+Quote Post
parzygnat
post 26.11.2008, 23:03:33
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 6
Dołączył: 31.12.2007
Skąd: Poznań

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


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. ?>
Go to the top of the page
+Quote Post
sowiq
post 26.11.2008, 23:13:29
Post #6





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


@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...

Ten post edytował sowiq 26.11.2008, 23:15:00
Go to the top of the page
+Quote Post
gregiolo
post 29.03.2011, 21:02:29
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


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
Go to the top of the page
+Quote Post
piotrooo89
post 29.03.2011, 21:07:42
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




aleś odgrzebał suchara.


--------------------
Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 20:22