Avatar billede nwn Nybegynder
23. januar 2009 - 19:22 Der er 11 kommentarer og
1 løsning

Sætte funktion på tekst via replace

Er det muligt, at sætte en funktion på en bestemt tekst, via replace?

Lad os sig jeg har variablen:

$text = "Dette er en test";

Så vil jeg gerne anvende en funktion på ordet "test" via replace. Men hvordan kan jeg implentere en funktion i nedenstående?

$text = str_replace("test", "test", $text);

Det skal ende ud med at virke således:

$text = str_replace("test", min_funktion("test"), $text);

Nogle der kan hjælpe?
Avatar billede yHec Novice
23. januar 2009 - 19:49 #1
Det burde kunne. Dette er ikke testet...

Function min_funktion($string) {
  return strtoupper($string);
}

$text = str_replace("test", min_funktion("test"), $text);

Tror det kunne virke....
Avatar billede locke Nybegynder
23. januar 2009 - 19:51 #2
$text = "Dette er en test";
$find = "test";

function min_funktion($match){
    return "[--".$match[0]."--]";
}
$text = preg_replace_callback('/'.preg_quote($find, '/').'/', 'min_funktion', $text);
Avatar billede nwn Nybegynder
23. januar 2009 - 20:07 #3
Jeg har fået mig formuleret forkert. Da jeg har skrevet spørgsmålet har jeg åbenbart glemt hvad jeg præcist ville. Det beklager jeg.

Meningen var at du via 2 tekster skulle kunne starte og slutte en funktion.

F.eks:

$text = str_replace("[start]", min_funktion(, $text);
$text = str_replace("[slut]", ),$text);

Problemet er bare, at overstående ikke virker.
Avatar billede tmi Nybegynder
23. januar 2009 - 23:38 #4
Hvis jeg har forstået det rigtigt kan du måske bruge funktionen eval, der eksekverer PHP kode, fx:
eval("myfunction('argument1','argument2',array('a, 'b')); echo 'hej';");
Avatar billede nwn Nybegynder
24. januar 2009 - 12:51 #5
tmi -> Jeg tror ikke funktionen kan hjælpe. Funktionen gør jo således, at kode ikke blive afviklet derinde. Jeg skal kunne anvende en funktion på noget bestemt tekst, via replace.
Avatar billede tmi Nybegynder
24. januar 2009 - 13:30 #6
Det er netop det locke's kode gør.
Avatar billede nwn Nybegynder
24. januar 2009 - 14:25 #7
Ja, men den bestemte tekst som jeg nævner, er som nævnt, den tekst der befinder sig imellem 2 ord. Til det kan jeg jo ikke bruge hans kode. Eller jo det kan jeg, den mangler blot nogle få ændringer, men jeg er ikke god til det med regular expressions osv.
Avatar billede tmi Nybegynder
24. januar 2009 - 15:21 #8
Prøv noget ala det her så:

$start= "[start]";
$slut= "[slut]";
$text = "se her: [start]fede bogstaver[slut].."

function min_funktion($match){
    return "<b>".$match[0]."</b>";
}
$text = preg_replace_callback("/".preg_quote($start).".*".preg_quote($slut)."/Us", 'min_funktion', $text);
Avatar billede nwn Nybegynder
24. januar 2009 - 15:59 #9
Sådan, det virker. Jeg takker dig tmi, vil du smide et svar?
Avatar billede nwn Nybegynder
24. januar 2009 - 16:05 #10
Og lige et lille sidste spørgsmål. Hvordan kommer linien:

$text = preg_replace_callback("/".preg_quote($start).".*".preg_quote($slut)."/Us", 'min_funktion', $text);

til at se ud, hvis du skal sende noget ekstra med i funktionen?

Altså min_funktion(indhold-mellem-start-og-slut, 5) f.eks, så 5 tallet sendes med og kan bruges inde i funktionen.
Avatar billede tmi Nybegynder
24. januar 2009 - 16:39 #11
preg_replace("/".preg_quote($start).".*".preg_quote($slut)."/Use", "min_funktion('\\0', 5)", $text);
Avatar billede nwn Nybegynder
24. januar 2009 - 16:51 #12
Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester