новые сообщения
ответы на мои сообщения
избранное
скрытые темы
случайный топик
открыть всё в новых вкладках
Форум → Программирование → PHP для идиотов → Проблемы с eval()
Проблемы с eval()
-
Здравствуйте, друзья!!!
Вот, встала такая проблема, не знаю, как решить ее, поэтому прошу помощи у Вас. Ситуация: нужно написать скрипт, который на вход получает числовые данные и формулы, по которым эти данные считать. Т.е., например, в отдельном файлике есть формулы для расчета, вида(например): $d=$a+b+c, следуюшая формула: $d=$a+b-c. Каждая формула с новой строки. Скрипт считывает данные эти. В параметры он подставляет значения массивов $a, $b, $c(как в формуле, только вместо параметров - массивы)(по индексам) . В результате заполняется другой(например, у меня $formula3) массив с матем.выражениями. Получилось такое:
Array ( [0] => $d=(0+30751+28379)/(100*0); [1] => $d=(1+18284+7544)/(100*1); [2] => $d=(2+309+19537)/(100*2); [3] => $d=(3+22986+23734)/(100*3); [4] => $d=(4+30523+7607)/(100*4); [5] => $d=(5+28248+6436)/(100*5); [6] => $d=(6+31665+23693)/(100*6); [7] => $d=(7+18582+3650)/(100*7); [8] => $d=(8+19479+24147)/(100*8); [9] => $d=(9+6148+9104)/(100*9); [10] => $d=(10+8685+13449)/(100*10); [11] => $d=(11+22562+19598)/(100*11); [12] => $d=(12+4787+3247)/(100*12); [13] => $d=(13+12400+26812)/(100*13); [14] => $d=(14+28649+4165)/(100*14); [15] => $d=(15+21614+9114)/(100*15); [16] => $d=(16+9999+17611)/(100*16); [17] => $d=(17+25500+21672)/(100*17); [18] => $d=(18+8613+27585)/(100*18); [19] => $d=(19+18810+24422)/(100*19); [20] => $d=(20+9515+25255)/(100*20); [21] => $d=(21+7560+4948)/(100*21);
если сделать так: echo eval($formula3[5]); то выдает такое: "Parse error: syntax error, unexpected '<' in Z:\home\formater\www\formula.php(93) : eval()'d code on line 1" . Подскажите, пожалуйста, как eval()'ом это можно посчитать.
Вот сам скрипт:
<?php
/**
* @author
* @copyright 2012
*/
$formuls=file_get_contents("C:/1/forms.txt");
$sama_formula=array();
$name=array();
$result=array();
$general=array();
preg_match_all('#<formula>.*?<\/formula>#ims', $formuls, $arr);
foreach($arr as $t=>$v)
{
foreach($v as $arr)
{
$sama_formula[]=$arr;
}
}
for($i=0; $i<count($sama_formula); $i++)
{
preg_match_all('#<name>.*?<\/name>#ims', $sama_formula[$i], $arr);
foreach($arr as $t=>$v)
{
foreach($v as $arr)
{
$name[]=$arr;
}
}
}
for($i=0; $i<count($sama_formula); $i++)
{
preg_match_all('#<general>.*?<\/general>#ims', $sama_formula[$i], $arr);
foreach($arr as $t=>$v)
{
foreach($v as $arr)
{
$general[]=$arr;
}
}
}
$a=array();
for($i=0; $i<100; $i++)
{
$a[]=$i;
}
for($i=0; $i<100; $i++)
{
$b[]=rand();
}
for($i=0; $i<100; $i++)
{
$c[]=rand();
}
$formula=array();
$formula1=array();
$formula2=array();
$formula3=array();
for($t=0; $t<count($general); $t++)
{
for($i=0; $i<count($a); $i++)
{
$formula[$t][$i]=$general[$t];
}
}
foreach($formula as $t=>$v)
{
for($i=0; $i<count($v); $i++)
{
$formula1[]=preg_replace('#\$a#ims', $a[$i], $v[$i]);
}
for($i=0; $i<count($v); $i++)
{
$formula2[]=preg_replace('#\$b#ims', $b[$i], $formula1[$i]);
}
for($i=0; $i<count($v); $i++)
{
$formula3[]=preg_replace('#\$c#ims', $c[$i], $formula2[$i]);
}
}
echo eval($formula3[5]);
?>
Вот файл с формулами:
<formula>
<name>
Сложение
</name>
<general>
echo $d=($a+$b+$c)/(100*$a);
</general>
</formula>
<formula>
<name>
Вычитание
</name>
<general>
echo $d=($a-$b-$c)/(100*$a);
</general>
</formula>
<formula>
<name>
умножение
</name>
<general>
echo $d=($a*$b*$c)/(100*$a);
</general>
</formula>
Подскажите, пожалуйста, где моя ошибка. Спасибо -
22 мая 2012 г. 6:57, спустя 2 часа 19 минут 52 секунды
Подскажите, пожалуйста, где моя ошибка. Спасибо
в днк
Пожалуйста, авторизуйтесь, чтобы написать комментарий!