【问题标题】:Evaluate string评估字符串
【发布时间】:2015-01-26 09:11:20
【问题描述】:

我在字符串变量中分配了 (true) 或 (false),例如:

$chk="(true) or (false)";

现在我想评估字符串,如果字符串将评估 true 或 false,如上它应该返回 false?

例如:

$chk1="(true) and (false)";

将返回 false。

上述方法隐含在网络应用程序功能中,其中用户必须通过检查他是否已通过其他级别来提升到下一个级别。清除等级的方法结合了上述逻辑事实。

【问题讨论】:

  • 懒人方式:eval。不那么懒惰的方式:学习语法和解析器并编写自己的。
  • 您可能需要考虑存储此类数据的其他方式,例如 JSON。

标签: php string boolean


【解决方案1】:

尝试详尽的方法。这是最简单的。

$chk = "(false) or (false)";
preg_match('/\((true|false)\)\s(or|and)\s\((true|false)\)/i', $chk, $res);
if (empty($res)) die('Error string!');
if (strtolower($res[1]) == 'true')  $a = TRUE;
if (strtolower($res[1]) == 'false') $a = FALSE;
if (strtolower($res[3]) == 'true')  $b = TRUE;
if (strtolower($res[3]) == 'false') $b = FALSE;
if (strtolower($res[2]) == 'or')  var_dump($a or $b);
if (strtolower($res[2]) == 'and') var_dump($a and $b);

改进了一些。

【讨论】:

  • 你能至少添加一些重要的细节吗?
  • @chridam 上述方法隐含在网络应用程序功能中,用户必须通过检查他是否已通过其他级别来提升到下一个级别。清除等级的方法结合了上述逻辑事实。
  • 感谢您的解释,如果您可以在答案中扩展它,这对其他用户也会非常有用。
  • @Wilon 什么是详尽的方法有什么线索?抱歉再次询问
猜你喜欢
  • 1970-01-01
  • 2020-04-20
  • 2014-01-28
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多