Php - kolorowanie tekstu

Mam nietypowy kłopot, chcę pokolorować dowolny tekst trzema kolorami tak by wyglądało to tak

4228fbde39dd34ec.jpg

czyli kolejno czarny-pomarańczowy-zielony-czarny

Jak coś takiego zrobić?

Chodzi Ci o bbcode ? Jeśli tak to poczytaj o wyrażeniach regularnych i skorzystaj z preg_replace

hmmm… wystarczy tylko substr() moim zdaniem, może do pomocy jestszcze strlen()

no i jeszcze chyba zapomniałeś o strpos() . Ale po co się tak bawić. Wyrażenia regularne będą prostsze i szybsze.

No tak xD

No to jest jedno z rozwiązań. Ty podałeś jeden przykład, ja inny.

Swoją drogą, prostota to kwestia indywidualna, zależy jak będzie chicła tego użyć, do jakiego tekstu, w jak zaawansowanym kodzie i ile tego tekstu będzie do pokolorowania.

nie, nie chodzi mi o bbcode.

chodzi o kolorowanie stringa wejścoowego według podanych wcześniej zasad.

Chodzi o coś w tym stylu.

tekstu będzie srednio gdzieś 30znaków, a maksymalnie 255.

Rozumiem że należy użyć podanych przez was funkcji, tylko nie bardzo wiem jak bo w php jestem cienki.

Czy mogę prosić o jakiś działający przykład?

No ale według jakiej zasady ma to działać? Bo jeszcze nam tego nie napisałeś.

Nie bardzo wiem o jakiej zasadzie jest mowa :frowning:

Jako parametr funkcji podaję jakiś tekst wejsciowy, dzieli go na 4 “powiedzmy że równe” segmenty i koloruje wg. podanej wcześniej kolejności czarny-pomarańczowy-zielony-czarny a na koniec zwraca sformatowanego (pokolorowanego) stringa.

Pewnie faktycznie czeba byz substr() bo na wyrażeniach regularnych chyba nie da rady - chociaż nie wiem.

Ok to na szybko

<?php


/**

 * Kolorowanie testu wg podziału na części

 *

 * @param string $txt

 * @param array $colors

 *

 * @return string

 */

function colorize( $txt, $colors ){

	$segments = count( $colors );		

	$segmentLength = ceil( strlen( $txt ) / $segments);

	$ret = $txt;

	for( $i = 0; $i < $segments; $i++ ){

	  if( $i == $segments ){

		  $segmentLength += strlen( $txt ) - ($i*$segmentLength);

		}	  

		$seg = substr( $txt, $i * $segmentLength, $segmentLength );

	  $ret = str_replace( $seg, '' . $seg . '', $ret );

	}


	return $ret;

}


echo colorize( 'biega balon po lesie, sialalala szuka grzybow, sialalala', array('red', 'green', '#000' ));

?>[/code]

Dzięki BalonPL , dokładnie to czego potrzebowałem :slight_smile:

…ale niesteyt jest małe ale. :frowning:

Odrobinke przerobiłem dla wygody wstawiając tablice kolorów do funkcji i mam teraz

wywołanie jest nieco prostsze, ale odkryłem niestety pewien uciążliwy błąd bo jak dam właśnie np. słowo test - które niby ma dokładnie tyle samo znaków co tablica kolorów, to wywala błąd a raczej

Dziwne, bo jak sprawdzam dla cyfr 1234 to koloruje je właściwie a z literami bywają problemy. Co jest grane i jak to poprawić??

Bo str_replace tu nieco miesza zamieniając co nie trzeba…

Tak na szybko zmieniane więc…, ale powinno działać :roll:

działa, super.

BalonPL, adpawl dziękiuje wam bardzo! :smiley: