У меня есть переменная вроде этого
$string = "0>0.1";
Я хочу оценить это внутри цикла if
if($string) { ///something }
но я получаю ошибку, если я это делаю. Как это сделать
вы не понимаете, как работают оценки или строки. Если вы поместите что-нибудь в строку, оно не будет оцениваться, а просто будет содержать это значение с этого момента.
$string = "0>0.1"; // contains "0>0.1" $bool = 0>0.1; // contains TRUE
Оператор IF требует логической, а не строки.
Вы можете использовать eval
для оценки вещей в строках. Помните, что eval
– это зло, и любой php-код может быть в нем.
У вас есть ужасный совет с вашим дубликатом. Вот более безопасный вариант, который будет фактически оценивать результат:
$str = "0>0.1"; if (preg_replace('/^(\d+\.?\d*)([><])(\d+\.?\d*)$/e', "$1 $2 $3", $str)) {
Обратите внимание, что он все равно вернет true для недопустимых строк, таких как "1>2b"
. Для этого вам понадобится совпадение и отдельная оценка выражения. (Написание фальшивого мини-парсера здесь не сложно, но, очевидно, излишний для вашего вопроса.)