PHP —— 识别运算符实现逻辑比较
最近遇到一个功能的开发,大致意思就是根据用户输入的条件,进行相关的比较操作。本来打算使用用户选择运算符的方式,但是后来结合项目实际,发现需要使用用户输入的自定义运算比较现实一点。大致意思就是:
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 —— 识别运算符实现逻辑比较相关推荐
- 熊猫数据集_对熊猫数据框使用逻辑比较
熊猫数据集 P (tPYTHON) Logical comparisons are used everywhere. 逻辑比较随处可见 . The Pandas library gives you a ...
- 为什么 Java 不支持运算符重载?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Yujiaao 来源 | https://se ...
- java 漂亮的连接曲线_猜猜 Java 为什么不支持运算符重载?
作者 | Yujiaao 来源 | https://segmentfault.com/a/1190000019962661 另一个类似的 Java 面试难题.为什么 C++ 支持运算符重载而 Java ...
- React学习笔记一(React入门+JSX+脚手架)
文章目录 1. React介绍和特点 1.1 React是什么 1.2 React的特点 2. React的开发依赖 2.1 React的三个依赖 2.2 Babel和React的关系 2.3 Rea ...
- 广义CAD技术发展历程
孙家广 摘自[计算机世界报] 计算机辅助设计(ComputerAidedDesign,CAD)是用计算机系统协助产生.修改.分析和优化设计的技术.随着Internet/Intranet网络和并行.高性 ...
- 10个比较艰难的Java面试题与答案!
作者:Yujiaao https://segmentfault.com/a/1190000019962661 这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不 ...
- 这10道Java面试题!95%的人回答不出来!
作者:Yujiaao https://segmentfault.com/a/1190000019962661 1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Ja ...
- 挑战 10 个最难回答的 Java 问题(附答案)
这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Jav ...
- 挑战10个最难回答的Java面试题,我第2题就跪了...
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 这是 ...
最新文章
- fusioncharts相关问题
- 华为数据之道 pdf_华为官方出品,华为数据之道新书来了
- C# 读取Excel CSV 类型文件到DataSet中,反之从DataSet写入excel
- 机器学习回归问题解答
- 处理器好点是否上网就快些?
- 该如何清理手机的垃圾?
- linux打印全部make编译信息
- 献给初学者-DSP入门教程
- 吴恩达深度学习——编程1
- 刷python题库的网站_大神教你刷bios工具
- MySQL 5.7.32-winx64安装教程(支持一台主机安装多个MySQL服务)
- win10相机打不开,qq可以正常打开:Windows 相机应用错误代码 0xA00F4288
- Android系统启动过程-uBoot+Kernel+Android
- win10计算机共享在哪,快速共享电脑文件,win10的“就近共享”功能了解一下!...
- python的help函数如何使用
- 余淼杰老师 经济学原理复习笔记(微观)
- 用户画像中怎么给用户打标签
- 微型计算机的alu部件包含在什么中,【单选题】微型计算机的ALU部件包括在( )之中。A. 存储器 B. I/O接口 C. O/I接口 D. CPU...
- Shell之function函数的定义及调用
- 多传感器融合定位七-惯性导航解算及误差分析其一
热门文章
- 走近Flex组件系列(四):分组组件(Box)、分割组件(DividedBox)和容器组件(Panel)
- Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
- 全栈开发工程师微信小程序-上(中)
- 阿里云全新一代FaaS平台F3(VU9P)实例发布
- jQuery 之 [ DOM操作 ]
- 静态路由的不通配置方式
- [译] Scala 类型的类型(一)
- django admin下拉列表不显示值,显示为object的处理
- Struts学习笔记总结
- Android 号码, 来电归属地 Jni 使用C++对二进制文件查询(一) 理论篇