Avatar billede broegaard Nybegynder
10. februar 2003 - 09:10 Der er 12 kommentarer og
1 løsning

problemer med eregi_replace

Jeg har lavet lidt kode der gerne skulle erstate alle [pris=XX] med XX * en konstant.
Men der er et problem med at få overført variablen til funktionen pris.
Jeg tror nok i kan regne ud hvad der er meningen med scriptet med det virker bare ikke.

function pris($pris) {
    $nypris = $pris * 5.84;
    return "$nypris";
}
$tekst = 'gfsdg [pris=25] hgjkad gjkfadlhgjkafdhgadhjafkg l hkad jgkl ag ahjdhal ';
$tekst = eregi_replace("\[pris=([0-9]+)\]", pris('\\1'), $tekst);
echo $tekst;
Avatar billede avminarm Juniormester
10. februar 2003 - 11:54 #1
Hmm - jeg er ikke helt med på hvad du vil men prøv:

function pris($pris) {
    $nypris = $pris * 5.84;
    return $nypris; // " " fjernet
}

evt. kan du:
function pris($pris) {
    $nypris = $pris * 5.84;
    global $nypris;
}
Avatar billede broegaard Nybegynder
10. februar 2003 - 12:29 #2
Det er fordi at jeg har en side med priser der er afhængig af doller kursen. Så var det at planen at hvergang der var en pris så skrive [pris=xx] hvor xx er prisen i doller. Og så erstatte alle priserne i dollers til priser i kroner.
Avatar billede avminarm Juniormester
10. februar 2003 - 14:00 #3
ja men hvad er det der ikke virker helt præcist - får du fejl medd?
Avatar billede broegaard Nybegynder
10. februar 2003 - 14:15 #4
Problemet er at den udskriver
gfsdg 0 hgjkad gjkfadlhgjkafdhgadhjafkg l hkad jgkl ag ahjdhal

altså tallet (her 25) bliver overført som en form for stregværdi.
Jeg har prøvet med settype($pris, "integer") men det virke lige fedt.
Avatar billede miraculix Nybegynder
10. februar 2003 - 18:03 #5
Du er nok nødt til at dele den i 2:

eregi("\[pris=([0-9]+)\]", $tekst, $tmppris);
$tekst = eregi_replace("\[pris=([0-9]+)\]", pris($tmppris[1]), $tekst);

Den vil ikke acceptere funktionskald i "replace" delen, når du samtidig bruger det du har fundet (\\1)
Avatar billede broegaard Nybegynder
11. februar 2003 - 14:14 #6
Der skal være mulighed for mere end en pris i en variabel.

ex:
$tekst = 'gfsdg [pris=25] hgjkad [pris=38] gjkfadlhgjkafdhgadhjafkg l hkad jgkl ag ahjdhal ';
Avatar billede broegaard Nybegynder
11. februar 2003 - 22:54 #7
OK. Jeg prøver at forklare det med et eksempel

$tekst = 'Prisen på varen er [pris=84]. Hvis du vil købe to koster de [pris=150].';
Hvis dollarkursen så er 7,5$/kr. skal den udskrive:

"Prisen på varen er 630. Hvis du vil købe to koster de 1125."

Altså priserne skal erstattes med prisen gange dollarkursen.
Avatar billede avminarm Juniormester
12. februar 2003 - 09:01 #8
dvs brugeren skal kun se: "Prisen på varen er 630. Hvis du vil købe to koster de 1125." - ikke??

hvordan genererer du selve teksten? - kunne man ikke benyttes 2 variabler
Avatar billede broegaard Nybegynder
12. februar 2003 - 09:53 #9
Teksten ligger i en database og bliver hentet ud som $tekst

Det skal bruges på en hjemmeside hvor alle siderne ligger i en database. Der skal så kunne skrives en eller flere priser ind forskellige steder i teksterne som så rettes ved udskrivning.
Avatar billede avminarm Juniormester
12. februar 2003 - 10:07 #10
og i $tekst kan antallet af priser variere? - 3 eller 5 eller 10 osv.
Avatar billede avminarm Juniormester
12. februar 2003 - 10:14 #11
prøv lige at tjekke dette sprg ud: det ligner meget det du er ude efter http://www.eksperten.dk/spm/11704
Avatar billede broegaard Nybegynder
12. februar 2003 - 21:32 #12
takker mange gange.
Det var den perfekte løsning på problemet.
Koden ser nu sådan her ud:
///-----------
$kurs = 7.5;
$tekst = 'Prisen på varen er [pris=84,5]. Hvis du vil købe to koster de [pris=150].';
while(ereg("\[pris=[1-9][0-9]+(\,[0-9]{1,2})?\]",$tekst,$regEx)) {
    $erstat = substr($regEx[0],6,-1);
    $value = ereg_replace(",", ".",$erstat);
    $replace_string = number_format($kurs * $value, 0, ',', '.') . " kr.";
    $tekst = ereg_replace("\[pris=" . $erstat . "\](.)?",$replace_string,$tekst);
}
echo $tekst;
Avatar billede avminarm Juniormester
13. februar 2003 - 09:12 #13
det var jo bar perfekt ;-)
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