ФорумПрограммированиеPHP для идиотов → Проблемы с eval()

Проблемы с eval()

  • aleks_a

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 22 мая 2012 г. 15:37

    Здравствуйте, друзья!!!

    Вот, встала такая проблема, не знаю, как решить ее, поэтому прошу помощи у Вас. Ситуация: нужно написать скрипт, который на вход получает числовые данные и формулы, по которым эти данные считать. Т.е., например, в отдельном файлике есть формулы для расчета, вида(например): $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>


    Подскажите, пожалуйста, где моя ошибка. Спасибо
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 22 мая 2012 г. 17:57, спустя 2 часа 19 минут 52 секунды

    Подскажите, пожалуйста, где моя ошибка. Спасибо

    в днк

Пожалуйста, авторизуйтесь, чтобы написать комментарий!