ребята, это простой вопрос для большинства из вас, вероятно. но я смущен тем, как я могу выполнять операции с символом оператора, сохраненным в переменной. Пример.
$first=5; $second=5; $operator="+"; $result=$first.$operator.$second; echo $result;
но $ result будет просто печатать 5 + 5. Я хочу, чтобы он выполнил операцию.
моя идея состоит в том, чтобы поместить все операции в условие if -> if ($ operator == '+') {добавить первый и второй операнды}. любые другие идеи?
Вы не за горами со своим синтаксисом, когда используете
$first.$operator.$second;
Вы буквально добавляете строки вместе, вам нужно использовать оператор «+» для успешного использования вашего метода. См. Ниже код, проверенный и проверенный
$first = 5; $second = 5; $operator = '+'; $result = $first+$operator+$second; echo $result; ?>
Вместо использования eval()
вы можете попробовать пользовательскую функцию с помощью switch()
внутри:
$first = 5; $second = 3; $operator = '+'; $result = mathOp($operator, $first, $second); echo $result; function mathOp($operator, $n1, $n2){ if(!is_numeric($n1) || !is_numeric($n2)){ return 'Error: You must use numbers'; } switch($operator){ case '+': return($n1 + $n2); case '-': return($n1 - $n2); case '*': return($n1 * $n2); case '/': if($n2 == 0){ return 'Error: Division by zero'; }else{ return($n1 / $n2); } default: return 'Unknown Operator detected'; } }
Вы должны использовать eval()
который выполняет операцию PHP.
$first=5; $second=5; $operator="+"; $term = $first.$operator.$second; eval("$result = " . $term); echo $result;
Но будьте осторожны с eval, он выполняет каждую функцию PHP. (Даже exec ..)
Eval – одно из решений, но есть и другие. Если ваш поиск SO для математического анализатора, вы найдете много ответов. Это хороший пример.
Итак, в основном, ваши варианты: eval()
с некоторой проверкой сначала или пользовательский математический парсер, который делает это для вас, например evalMath .
Если вы ищете только простые операции (+, -, *, /) и два оператора, используйте функцию проверки для ваших параметров (только числа, только известные операторы) и используйте eval. Если вы хотите иметь возможность анализировать сложные операции (скобки, переменные …), то переходите к парсеру.