Mam nietypowy kłopot, chcę pokolorować dowolny tekst trzema kolorami tak by wyglądało to tak
czyli kolejno czarny-pomarańczowy-zielony-czarny
Jak coś takiego zrobić?
Mam nietypowy kłopot, chcę pokolorować dowolny tekst trzema kolorami tak by wyglądało to tak
czyli kolejno czarny-pomarańczowy-zielony-czarny
Jak coś takiego zrobić?
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
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
…ale niesteyt jest małe ale.
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!