Notenformel von String zur Funktion

DoRiMaN

Erfahrenes Mitglied
Hallo an alle...

Habe da mal eine Frage...

ich habe in meiner Datenbank eine Notenformel. Die sieht z.B. so aus:

((%rp%*5)/%mp%)+1
%rp% = Reached Points
%mp% = Maximum Points

Nun lese ich diese Formel aus, und möchte sie dann auch berechnen lassen. Dies löse ich mit den Regular Expressions...

PHP:
$formula2_toreplace = array('%rp%','%mp%');
$formula2_replace = array($points,$maxpoints);
$test_mark_formula2 = str_replace($formula2_toreplace,$formula2_replace,mysql_result($query2,0,"test_mark_formula"));
$mark = preg_replace("#(.*)#e",$test_mark_formula2,$test_string);
echo("MARK: ".$mark);

die Variabeln "$points" und "$maxpoints" enthalten die Punktzahlen! Die Variable "$test_mark_formula" sollte dann etwa so ausssehen:

Dies funktioniert nun auch... Jedoch ist die Ausgabe doppelt...

Statt:
MARK: 4.8888888888889
sehe ich:
MARK: 4.88888888888894.8888888888889

Kann mir jemand sagen weshalb? Ich weiss echt nicht, wo das Problem liegt!

Vielleicht denke ich auch zu weit?

Hoffe da kann mir jemand helfen!

Danke unf Greetz,


DoRiMaN
 
Ich hab mir das Ganze jetzt nicht genauer angeschaut, aber ich verstehe nicht, warum du RegEx hierfür verwendest?!
Wie wärs denn mit [phpf]eval[/phpf] ?

PHP:
<?php
$formel    = '((%rp%*5)/%mp%)+1';
$points    = 7;
$maxpoints = 9;

$formel_toreplace = array('%rp%','%mp%'); 
$formel_replace   = array($points,$maxpoints); 
 
$test_mark_formel = str_replace($formel_toreplace, $formel_replace, $formel); 

//fürht folgendes aus: $ergebnis = ((7*5)/9)+1;
eval('$ergebnis = '.$test_mark_formel.';');

echo $ergebnis;
?>
 
Ok, so das ganze besser :-)

Danke!

Hatte schon mal mit den RegEx und dem Switch /e arbeiten müssen. Weil ich zu faul war, hab ich dann einfach den alten Code kopiert und benutzt. Und ich hab total vergessen, dass es [phpf]eval[/phpf] gibt...

Aber Vielen Dank! Es funktioniert! :-) :)


Greetz

DoRiMaN
 
Zurück