P O R A D Y - I T

Ładowanie

W różnych przypadkach potrzebujemy podzielić jakiś dłuższy ciąg znaków. Z reguły będzie to jakiś fragment tekstu. Z takim podziałem wiąże się pewne ograniczenie, nie chcemy, aby były podział przebiegał w środku jakiegoś słowa. Rozwiązaniem tego problemu jest użycie jednej funkcji 😉

Najprostszym rozwiązaniem tego problemu jest wykorzystanie funkcji wordwrap. Pozwala ona na wstawienie określonego przez nas separatora po określonej ilości znaków, jednak nie w środku jakiegoś słowa.

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';

echo wordwrap($text, 20, "<br />");

// Lorem ipsum dolor<br />sit amet,<br />consectetur<br />adipiscing elit

Wynik działania jest dość oczywisty i nie wymaga większego tłumaczenia. Funkcja dotarła do 20 znaku i zobaczyła, że jest w środku słowa „sit”, w związku z czym cofnęła się do pierwszego białego znaku i dodała w tym miejscu odpowiedni znacznik.

Pojawia się jednak pewien problem, gdy mamy bardzo długie słowa, które są dłuższe niż zdefiniowany limit. W takim przypadku domyślnie nie są one dzielone. Co nie zawsze jest dobrym rozwiązaniem, ale o tym za chwilę.

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';

echo wordwrap($text, 10, "<br />");

// Lorem<br />ipsum<br />dolor sit<br />amet,<br />consectetur<br />adipiscing<br />elit

Widzimy, że dodanie znacznika jest dużo częstsze. Niestety słowo consectetur jest dłuższe niż nasz limit, a nie został dodany znacznik. Co może w niektórych przypadkach spowodować np. ucięcie znaków na drukarkach. DLatego jeśli chcemy wymusić limit dla takich przypadków to do funkcji przekazujemy jeszcze jeden parametr.

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';

echo wordwrap($text, 10, "<br />", true);

// Lorem<br />ipsum<br />dolor sit<br />amet,<br />consectetu<br />r<br />adipiscing<br />elit

Gdy ostatni parametr funkcji jest ustawiony na true, limit jest egzekwowany bezwzględnie i w przypadkach gdy nie ma wyjścia w słowo zostanie wstawiony znacznik.

Teraz jeśli mamy potrzebę to możemy taki ciąg znaków podzielić na elementy tablicy na podstawie znacznika.

$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';

$arrText = explode('<br />', wordwrap($text, 20, "<br />"));

var_dump($arrText);

//array (size=4)
//  0 => string 'Lorem ipsum dolor' (length=17)
//  1 => string 'sit amet,' (length=9)
//  2 => string 'consectetur' (length=11)
//  3 => string 'adipiscing elit' (length=15)

Leave a Comment