【问题标题】:PHP: Evaluate string as logical expression and return true or falsePHP:将字符串评估为逻辑表达式并返回真或假
【发布时间】:2015-11-30 11:20:32
【问题描述】:

我有一个包含数百个逻辑表达式的 txt 文件。 我想阅读每一个(到目前为止没问题)并能够递归地评估它,但我不知道怎么做。该表达式具有 && 和 == 以及字符串和数字之间的比较。我不想使用 eval,因为它显然不推荐,而且在我的情况下也不起作用。

示例。假设我读了这两个字符串:

s = "a == alpha && b == beta || b == omega", or
s = "g >= 2 && f != gamma"

我想把它们分解成

($a == "alpha" && $b == "beta" || b == "omega")
($g >= 2 && f!= "gamma")

在 if 中使用它们,使其返回 TRUE 或 FALSE。我的问题不在于替换变量,而是让它们作为逻辑表达式进行评估

谁能帮帮我?

提前致谢, 克里斯蒂娜

【问题讨论】:

  • 你的问题是什么???将实际值放在这个表达式中??例如:这是输入- a == alpha && b == beta || b == omega 你想要这个 1==1 && 2==2 || 3==3
  • 放置值不是问题。评估表达式是。因为这是一个字符串,所以它不求值。
  • 我的理解是:if( (($a == 'alpha' && $b == 'beta') || ($b == 'omega')) || ($ g >= 2 && $f != 'gamma')) { // 做某事 } else { // 做某事 } 其中 $a, $b,$g,$f 是变量
  • 使用eval 是您最好的选择,但您仍然需要将字符串重新编写为普通的 php 代码
  • 您进行了编辑。我理解的没错。 (a == alpha && b == beta || b == omega) 到 ($a == "alpha" && $b == "beta" || b == "omega") 最后在替换变量值之后它看起来像 - (1=='alpha' && 2=='beta' || 3=='omega')

标签: php string recursion nodes logical-operators


【解决方案1】:

试试这个:

if( (($a == 'alpha' && $b == 'beta') || ($b == 'omega')) || ($g >= 2 && $f != 'gamma'))
{
    // returns true
}
else
{
    // returns false
}

【讨论】:

  • 字符串并不总是相同的。这个想法是创建一个知道如何评估这种字符串的函数。
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 2011-08-03
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多