最近遇到一个功能的开发,大致意思就是根据用户输入的条件,进行相关的比较操作。本来打算使用用户选择运算符的方式,但是后来结合项目实际,发现需要使用用户输入的自定义运算比较现实一点。大致意思就是:

1、用户输入:

a.多条直接为或的关系(用户输入)

time>12
time=9

b.单条并的关系(用户输入)

time>12&&time<25

c.可用比较运算符(>、<、<=、=、!=)

d.要求比较的对象卸载前边。

2、根据实际需求,写出以下两个函数:

<?php$condition = array('time>12&&time<=25');var_dump(getCompare('time','18',$condition));//这里的比较对象“time”也可以通过用户输入获取,需要加一个正则,我这项目不需要// $condition :array(): mtime>24 / mtime <23  / mtime=53  / mtime=12||mtime>12function getCompare($name, $data, $condition){if (!is_array($condition)) {return false;}foreach ($condition as $key => $value) {$value = str_replace($name, '', $value);if (!strpos($value, '&&')) {return explainCompare($data, $value);}else{$subCon = explode('&&', $value);foreach ($subCon as $v) {if(!explainCompare($data,$v)){return false;}}return true;}}}function explainCompare($data, $condition){if(!preg_match('/^[<>=!%]+/', $condition, $operator)){    //$operator[0] return false;}$value = str_replace($operator[0], '', $condition);//x>12  =>  12($value)echo $operator[0];echo "\n",$value,"\n";switch ($operator[0]) {case '>':return ($data > $value);break;case '>=':return ($data >= $value);break;case '<':return ($data < $value);break;case '<=':return ($data <= $value);break;case '==':return ($data == $value);break;case '<>':return ($data <> $value);break;case '!=':return ($data != $value);break;
            default:return false;break;}}
?>

望见者多指正,请不要冰冷的掠过~

转载于:https://www.cnblogs.com/picaso/p/3445468.html

PHP —— 识别运算符实现逻辑比较相关推荐

  1. 熊猫数据集_对熊猫数据框使用逻辑比较

    熊猫数据集 P (tPYTHON) Logical comparisons are used everywhere. 逻辑比较随处可见 . The Pandas library gives you a ...

  2. 为什么 Java 不支持运算符重载?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Yujiaao 来源 | https://se ...

  3. java 漂亮的连接曲线_猜猜 Java 为什么不支持运算符重载?

    作者 | Yujiaao 来源 | https://segmentfault.com/a/1190000019962661 另一个类似的 Java 面试难题.为什么 C++ 支持运算符重载而 Java ...

  4. React学习笔记一(React入门+JSX+脚手架)

    文章目录 1. React介绍和特点 1.1 React是什么 1.2 React的特点 2. React的开发依赖 2.1 React的三个依赖 2.2 Babel和React的关系 2.3 Rea ...

  5. 广义CAD技术发展历程

    孙家广 摘自[计算机世界报] 计算机辅助设计(ComputerAidedDesign,CAD)是用计算机系统协助产生.修改.分析和优化设计的技术.随着Internet/Intranet网络和并行.高性 ...

  6. 10个比较艰难的Java面试题与答案!

    作者:Yujiaao https://segmentfault.com/a/1190000019962661 这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不 ...

  7. 这10道Java面试题!95%的人回答不出来!

    作者:Yujiaao https://segmentfault.com/a/1190000019962661 1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Ja ...

  8. 挑战 10 个最难回答的 Java 问题(附答案)

    这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Jav ...

  9. 挑战10个最难回答的Java面试题,我第2题就跪了...

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 这是 ...

最新文章

  1. fusioncharts相关问题
  2. 华为数据之道 pdf_华为官方出品,华为数据之道新书来了
  3. C# 读取Excel CSV 类型文件到DataSet中,反之从DataSet写入excel
  4. 机器学习回归问题解答
  5. 处理器好点是否上网就快些?
  6. 该如何清理手机的垃圾?
  7. linux打印全部make编译信息
  8. 献给初学者-DSP入门教程
  9. 吴恩达深度学习——编程1
  10. 刷python题库的网站_大神教你刷bios工具
  11. MySQL 5.7.32-winx64安装教程(支持一台主机安装多个MySQL服务)
  12. win10相机打不开,qq可以正常打开:Windows 相机应用错误代码 0xA00F4288
  13. Android系统启动过程-uBoot+Kernel+Android
  14. win10计算机共享在哪,快速共享电脑文件,win10的“就近共享”功能了解一下!...
  15. python的help函数如何使用
  16. 余淼杰老师 经济学原理复习笔记(微观)
  17. 用户画像中怎么给用户打标签
  18. 微型计算机的alu部件包含在什么中,【单选题】微型计算机的ALU部件包括在( )之中。A. 存储器 B. I/O接口 C. O/I接口 D. CPU...
  19. Shell之function函数的定义及调用
  20. 多传感器融合定位七-惯性导航解算及误差分析其一

热门文章

  1. 走近Flex组件系列(四):分组组件(Box)、分割组件(DividedBox)和容器组件(Panel)
  2. Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
  3. 全栈开发工程师微信小程序-上(中)
  4. 阿里云全新一代FaaS平台F3(VU9P)实例发布
  5. jQuery 之 [ DOM操作 ]
  6. 静态路由的不通配置方式
  7. [译] Scala 类型的类型(一)
  8. django admin下拉列表不显示值,显示为object的处理
  9. Struts学习笔记总结
  10. Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇