2012-03-26 3 views
0

У меня есть простой скрипт с большим количеством формул, как так:Как напечатать уравнение PHP для его анализа?

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

Есть ли простой способ вывода значений для отладки уравнения? Как:

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

Или я должен сделать это обычным способом:

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

Я получил много этих формул, поэтому я завожусь ярлык для их отладки.

+3

Вот почему мы не пишем длинные формулы вроде этого. –

+0

Нет ярлыков с математикой ... – Jon

ответ

3

Вы должны быть в состоянии окружить формулу в двойные кавычки, например, так:

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

Это позволит вам повторить $ формулу и все переменные должны быть преобразованы в их фактических значений.

Что касается способа сделать это без копирования/вставки или вставки цитат, нет. PHP будет оценивать все вещи в правой части = так, чтобы $ formula заканчивалась (без кавычек) только с конечным результатом. Если вы хотите, чтобы результат и «отладки» вывод, который вы могли бы сделать это:

$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; 

Тогда вы получите как ответ и отладочный вывод.

+0

Owww. Человек, которого вы качаете, я чувствую себя настолько глупо сейчас ... Если это не очевидно, чем я не знаю, что такое ... –

+0

Убедитесь, что вы используете двойные кавычки. Одиночные кавычки будут отображать формулу без замещения переменной. –

2

Если вы заключаете уравнение в кавычках, это будет решать переменные, но не делать математику, например, так:

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

Если вы действительно хотите решить уравнение с помощью строки, вы можете использовать eval(), как так:

$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 

Имейте в виду, что Eval является довольно мощным, и что он будет выдавать ошибку, если переменные не определены, так как уравнение не будет иметь смысла.

1

Я думаю, что вы должны быть в состоянии превратить весь известково в строку, а затем переменные будут выводить их значения: echo "foo is $foo"; // foo is foobar

Не уверен, что это именно то, что вы искали.

2

Итак, когда вы получаете данные из математики, создайте строку, затем используйте eval для выполнения математики!

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

Это выглядит очень аккуратно и ясно. Просто убедитесь, что математика - это все, что получает 'eval()': ed – micke

+0

@micke Да, eval опасен, когда открыт что-то нехорошее, но вы можете защитить его без проблем;) –

Смежные вопросы