2012-03-26 5 views
0

Ich habe wie so ein einfaches Skript mit vielen Formeln bekommt:Wie PHP Gleichung drucken, um es zu analysieren?

$formula = 12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E); 

Gibt es eine einfache Möglichkeit, die Werte für die Ausgabe der Gleichung zu debuggen? Wie:

12 * (15 (44 * 11) + 33) + 3 * [...] 

Oder ich muss es die übliche Art und Weise tun:

echo "12" . '* ('. $C .' + ' [...] 

ich viele dieser Formeln haben, so suche ich einige Abkürzung sie zu debuggen.

+3

Deshalb schreiben wir lange Formeln wie diese nicht. –

+0

Es gibt keine Abkürzungen mit Mathe ... – Jon

Antwort

3

sollten Sie in der Lage sein, Ihre Formel mit doppelten Anführungszeichen zu umgeben, wie so:

$formula = "12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E)"; 

, dass Sie $ Formel und alle Variablen Echo erlauben sollten, um ihre tatsächlichen Werte umgewandelt werden.

Soweit eine Möglichkeit, das ohne Kopieren/Einfügen oder Einfügen der Anführungszeichen zu tun, nein. PHP wird all die Sachen auf der rechten Seite des = bewerten, so dass $ Formel endet (ohne die Anführungszeichen) mit nur dem Endergebnis. Wenn Sie das Ergebnis und die „debug“ ausgeben möchten können Sie dies tun:

$formula = 12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E); 
$formulaDebug = "12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E)"; 

echo $formulaDebug . " = " . $formula . PHP_EOL; 

Dann bringen Sie beide die Antwort und die Debug-Ausgabe.

+0

Owww. Mann Du schaukelst, ich fühle mich jetzt so dumm ... Wenn das nicht offensichtlich ist, weiß ich nicht, was ist ... –

+0

Stellen Sie sicher, dass Sie doppelte Anführungszeichen verwenden. Einfache Anführungszeichen zeigen die Formel an, ohne dass die Variablensubstitution auftritt. –

2

Wenn Sie die Gleichung in Anführungszeichen wickeln, wird es die Variablen lösen, aber die Mathematik nicht tun, etwa so:

$formula = "12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E)"; 

Wenn Sie möchten, um tatsächlich die Gleichung lösen die Zeichenfolge verwenden, können Sie eval() verwenden können, etwa so:

$formula = "12 *($C + ($D * $A) + $H) + $B * ((($F+$J)*$M/$L)+(($G+$K)*$N/$L)+$E)"; 

echo $formula; \\ Equation with vars filled in. 

eval("echo $formula;"); \\ Solved equation 

beachten sie, dass eval ziemlich stark ist und dass es einen Fehler aus, wenn die Variablen nicht definiert sind, wie die Gleichung nicht Sinn machen.

1

Ich denke, man sollte den gesamten calc in einen String und dann die Variablen ausgibt ihre Werte drehen können: echo "foo is $foo"; // foo is foobar

nicht sicher, ob dies ist genau das, was Sie suchen.

2

Also, wenn Sie die Daten aus Mathe erhalten, bauen Sie eine Zeichenfolge und dann eval, um die Mathematik zu tun!

<?php 
$Test = '7 * 9'; 
echo 'Eqau: '.$Test.'<br />'; // Eqau: 7 * 9 
eval("\$Test2 = $Test;"); 
echo 'Res: '.$Test2;   // Res: 63 
?> 
+0

Das sieht sehr ordentlich und klar aus. Stellen Sie nur sicher, dass Mathe alles ist, was 'eval()' bekommt: ed – micke

+0

@micke Ja, Eval ist gefährlich, wenn etwas nicht gut ist, aber Sie können es ohne Probleme schützen;) –

Verwandte Themen