如果我有:
$compare = "5<6";
如何查看比较变量并返回值 true。输入需要是一个字符串,所以带走它"不会有帮助。该字符串可能非常复杂,所以我正在寻找一个已经在 PHP 中可以运行它的函数,或者某个人之前编写的可以执行此操作的函数。我已经尝试了该eval()功能,但它不起作用,所以:
$compare = "5<6";
echo eval($compare);
只是错误。提前感谢您的帮助。
如果我有:
$compare = "5<6";
如何查看比较变量并返回值 true。输入需要是一个字符串,所以带走它"不会有帮助。该字符串可能非常复杂,所以我正在寻找一个已经在 PHP 中可以运行它的函数,或者某个人之前编写的可以执行此操作的函数。我已经尝试了该eval()功能,但它不起作用,所以:
$compare = "5<6";
echo eval($compare);
只是错误。提前感谢您的帮助。
尝试这个:
<?php
$compare = "5<6";
eval('$output = '.$compare.';');
echo $output;
?>
不鼓励使用代码评估函数,因为它可能会导致很多安全问题,但是如果你想保持这种逻辑,你必须评估一个有效的代码:
<?php
$compare = "5 > 6";
eval("\$result = $compare;");
var_dump($result);
您的比较string必须在eval函数内部使用,就像在普通代码中一样,不期望返回值。所以我在这个示例代码中所做的更改是我使用了一个名为的变量$result来存储评估代码中的值。
正如您在运行此代码时将看到的,$result将是一个boolean值(false在此示例中,因为 5 显然不大于 6)。
来自 PHP 文档: http: //php.net/manual/en/function.eval.php
注意eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传入其中,而无需事先正确验证。
您可以echo直接显示:
<?php
$compare = '5<6';
echo $compare. "\n";
echo eval("return $compare;");
?>
或者您可以将结果存储在变量中以便稍后显示:
<?php
$compare = '5<6';
echo $compare. "\n";
$result = eval("return $compare;");
echo $result;
?>
当心 ;)
如果你想避免eval它很容易解析比较表达式。只需在比较运算符上拆分字符串并返回相应比较的结果。
function compare($expr) {
$expr = preg_split('/(>=|<=|<|>|=)/', $expr, -1, PREG_SPLIT_DELIM_CAPTURE);
list($lhs, $op, $rhs) = $expr;
switch ($op) {
case '<': return $lhs < $rhs;
case '<=': return $lhs <= $rhs;
case '>': return $lhs > $rhs;
case '>=': return $lhs >= $rhs;
case '==': return $lhs == $rhs;
}
}
显然,当我最初阅读这个问题时,我错过了关于“字符串可能非常复杂”的一点,所以这对你的情况可能没有帮助,但我会把它留在这里以供将来参考。