Pental Stary Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 Chciałbym zrobić taki mały bajer. Mam tablicę: $array = new array { "ale", "fajny", "tekst" }; // nie wiem, chyba tak się tworzy nowy obiekt tablicy Mam jeden string, np.: $string = file_get_contents( $fname ); I jeśli np. wartość tej zmiennej to: hejka to jest fajny\n\t\ttekst i \n odporny na białe znaki, ale czy na pew\tno? Chciałbym zamienić na: hejka to jest <span style="color: blue;">fajny</span>\n\t\t<span style="color: blue;">tekst</span> i \n odporny na białe znaki, <span style="color: blue;">ale</span> czy na pew\tno? Oczywiście z pewnością użyta zostanie pętla krokowa, np. : for( $i = 0; $i < sizeof( $array ); ++$i ) if ( $array[ $i ] == $temp ) ... Da mi ktoś jakiś nawydajniejszy kod? Oczywiście podany na tacy i posiekany na kawałeczki :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 Po pierwsze, chodziło ci raczej o taki kod: $array = array (0 => 'ale', 1 => 'fajny', 2 => 'tekst' ); Aby je zamienić, użyj wyrażeń regularnych. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 Piczer, on mówił o wydajnym kodzie ;) #Pental <?php $array = array( "ale", "fajny", "tekst" ); $string = file_get_contents( $fname ); foreach( $array as $rpl ) { str_replace( $rpl, '<span style="color: blue;">' . $rpl . '</span>', $string ); } ?> Rozwiązanie pisane na szybko, aczkolwiek powinno wystarczyć. Z wydajnością nie wiem jak. ;) btw. Niestety w PHP typy danych nie są obiektami. Dziwne, ale prawdziwe. ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 9 Grudnia 2008 Autor Udostępnij Opublikowano 9 Grudnia 2008 Weź idź Piczer z taką odpowiedzią. Mi chodzi o same pokazanie, jak to zrobić, ale wiedziałem, że albo nic nie napiszesz, bo nie będziesz wiedział, albo się do składni przyczepisz... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 9 Grudnia 2008 Filar Społeczności Udostępnij Opublikowano 9 Grudnia 2008 @Kofel: Tablicę możesz podać jako argument str_replace i foreach staje się zbędny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 9 Grudnia 2008 Autor Udostępnij Opublikowano 9 Grudnia 2008 Haha, potraktuję to jako żart :D . Spodziewałem się chociaż 10 linijek :P . Dzięki wielkie :) . Czy to się nadaje na kolorowanie składni GMLa? Bo robię stronę z kursami GMLa i chcę, aby wygodnie się edytowało lekcje, był kod a'la BBCode, no i kolorowanie składni GMLa, które jest imho niezbędne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kryniak Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 A skoro tak to lepsze będzie użycie preg_replace(), ale dzięki str_replace też się da :). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 @Kofel: Tablicę możesz podać jako argument str_replace i foreach staje się zbędny. Tak, ale dla tego przypadku to nie będzie działało bo wtedy też do drugiego argumentu musimy wprowadzić tablicę. :) A to raczej nie bedzie wygodne. Poprawka: <?php $array = array( "ale", "fajny", "tekst" ); $string = 'fajny tekst, ale glupi'; foreach( $array as $rpl ) { $string = str_ireplace( $rpl, '<span style="color: blue;">' . $rpl . '</span>', $string ); } ?> #Pental Da się, ale do tego str_replace Tobie nie wystarczy :P EDIT: Zastąpiłem str_replace na str_ireplace Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 9 Grudnia 2008 Udostępnij Opublikowano 9 Grudnia 2008 Weź idź Piczer z taką odpowiedzią. Mi chodzi o same pokazanie, jak to zrobić, ale wiedziałem, że albo nic nie napiszesz, bo nie będziesz wiedział, albo się do składni przyczepisz... Pokazałem, jak to zrobić, użyj wyrażeń regularnych. Ślepy? Mamy odwalić za ciebie połowę kodu? Lepiej dla ciebie by było jakbyś poszperał po necie, jak to zrobić, nauczyłbyś się korzystać google. A jeśli oni dali wydajniejszy sposób, to użyj ich. Proste. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 10 Grudnia 2008 Autor Udostępnij Opublikowano 10 Grudnia 2008 Najwyraźniej ty jesteś ślepy, wyraźnie napisałem, że chcę gotowe rozwiązanie, ew. kod. Kofel, ale jeśli kod piszę tylko ja i jest dobry, to wystarczy :P . Ja teraz myślę, o takim rozwiązaniu: $input = file_get_contents( $fname ); $output = ""; function check_next( $char ) { $temp = "()<>][{}/\| "; for( $x = 0; $x < strlen( $temp ); ++$x ) { if ( substr( $temp, $x, 1 ) == $char ) return true; } return false; } for( $i = 0; $i < strlen( $input ); ++$i ) { $done = false; for( $t = 0; $t < sizeof( $array1 ); ++$t ) { if ( $array1[ $t ] == substr( $input, $i, strlen( $array1[ $t ] ) ) { if ( check_next( substr( $input, $i + strlen( $array1[ $t ] ), 1 ) ) ) { $output .= "<span style='color: blue;'" . substr( $input, $i, strlen( $array1[ $t ] ) . "</span>"; $i += strlen( $array1[ $t ] ) - 1; continue; $done = true; } } } if ( !$done ) { $output .= substr( $input, $i, 1 ); } } Co o tym sądzicie? A, jak do tablicy w PHP wczytać każdą linię z pliku :P ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 10 Grudnia 2008 Udostępnij Opublikowano 10 Grudnia 2008 $array = file( 'path' ); Weź czytaj manual http://php.net . Prędzej sobie sam rozwiązanie znajdziesz. ;p A tak poza tym. Po co piszesz highlight GML jak taki jest udostępniony? :D Naprawdę, nie trzeba wynajdywać koła drugi raz ;) Dokładnie to mi chodzi o GeSHi, Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 10 Grudnia 2008 Autor Udostępnij Opublikowano 10 Grudnia 2008 Widziałem już, ale widzisz, wolę drugi raz wynaleźć koło, serio :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Grudnia 2008 Administratorzy Udostępnij Opublikowano 10 Grudnia 2008 http://hurkel.gmclan.org/tymon/?path=php/gml/parser/data ?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 10 Grudnia 2008 Autor Udostępnij Opublikowano 10 Grudnia 2008 Co mi to daje? Źródła nie obejrzę... Hmm... poprawi ktoś tamten kod by działał? Byc może są jakieś literówki... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 10 Grudnia 2008 Administratorzy Udostępnij Opublikowano 10 Grudnia 2008 Kurcze, kiedyś źródło się pokazywało :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 10 Grudnia 2008 Udostępnij Opublikowano 10 Grudnia 2008 Z tym kodem, to nie wiem, co ty najlepszego kombinujesz ;o A, jak do tablicy w PHP wczytać każdą linię z pliku :P ? http://pl.php.net/manual/pl/function.file.php Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 10 Grudnia 2008 Autor Udostępnij Opublikowano 10 Grudnia 2008 Dobra, po sprawie, sam wpadłem jakoś jak to zrobić. Tylko jedno pytanie - mam kod: <?php function gml( $fname ) { $a1 = file( "funkcje.txt" ); $input = file_get_contents( $fname ); $output = ""; for ( $i = 0; $i < strlen( $input ); ++$i ) { foreach( $a1 as $c ) { $d = rtrim( $c ); if ( $d == substr( $input, $i, strlen( $d ) ) ) { $output .= "<span style='color: blue'>" . $c . "</span>"; $i += strlen( $d ); continue; } } $output .= substr( $input, $i, 1 ); } return $output; } echo gml( 'skrypt.txt' ); ?> I pytanko - jak dobrze zrobić, kombinując z nl2br, żeby były entery? #Edit - Jej, co za głupie pytanie, przed file_get_contents() było dać i po sprawie. Dzięki za pomoc :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 10 Grudnia 2008 Udostępnij Opublikowano 10 Grudnia 2008 Wg. mnie bez sensu jest przekazywać w argumencie nazwę pliku z funkcjami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 11 Grudnia 2008 Autor Udostępnij Opublikowano 11 Grudnia 2008 Piczer, ponieważ nie mam zamiaru cię w żaden sposób obrażać - $fname to nazwa pliku wejściowego, czyli z kodem GML :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piczer Opublikowano 11 Grudnia 2008 Udostępnij Opublikowano 11 Grudnia 2008 A, tak. xD 4 i 5 linijka kodu mi się w oczach poprzestawiała. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Grudnia 2008 Udostępnij Opublikowano 13 Grudnia 2008 Ładowanie tablicy funkcji przy każdym wywołaniu funkcji jest przynajmniej bezsensu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 13 Grudnia 2008 Filar Społeczności Udostępnij Opublikowano 13 Grudnia 2008 Tak, ale dla tego przypadku to nie będzie działało bo wtedy też do drugiego argumentu musimy wprowadzić tablicę. :) A to raczej nie bedzie wygodne.Oczywiście że będzie działało, następnym razem lepiej dokładnie sprawdź zanim coś napiszesz. echo str_replace( array( 'ale', 'fajny', 'tekst' ), 'x', 'ale fajny tekst' ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 13 Grudnia 2008 Autor Udostępnij Opublikowano 13 Grudnia 2008 Heh, słuszna uwaga Tymon :P . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Grudnia 2008 Udostępnij Opublikowano 13 Grudnia 2008 W sumie możesz zrobić globalną z taką tablicą. $_funkcje = null; function gml() { global $_funkcje; if( $_funkcje === null ) $_funkcje = file( 'funkcje.txt' ); ... } Wtedy jesteś już fajny. =P Btw. preg_replace i tak jest fajniejsze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 13 Grudnia 2008 Administratorzy Udostępnij Opublikowano 13 Grudnia 2008 nie wiem czy klasa nie była by lepsza w takim przypadku, bo to ciągłe global to też nie jest najszybsze :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 13 Grudnia 2008 Udostępnij Opublikowano 13 Grudnia 2008 Oczywiście że będzie działało, następnym razem lepiej dokładnie sprawdź zanim coś napiszesz. echo str_replace( array( 'ale', 'fajny', 'tekst' ), 'x', 'ale fajny tekst' ); No świetny jesteś. Ale przecież wtedy nie zrobisz tego o co prosił Pental z użyciem str_replace.... -.- Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się