PHP——自定义比较算法
很多时候,程序都是直接写好逻辑运算,提供给用户的是一个值,然后后台去比较;但是有时会提供一种类似计算器一样的交互方式的时候,PHP只能读懂用户的输入来进行比较了~
最近的一个项目涉及到一个由用户自定义输入比较方法,后台取相应数据,自动比较,输出结果。比如:
用户输入: time>9&&time<15
后台执行: 读懂输入,获取数据,进行比较,输出比较的结果
看了需求,完全就是模拟PHP比较运算与数据库操作啊,干吧~~
<?php
$datas = json_decode(file_get_contents(INDEXJSON),true);// Global Var
// print_r($da); $condition = 'size>102400&&dir%/var/www/html/wordpress/wp-admin';
print_r(compare($condition)); // getdata for compare
function compare($condition){
global $datas;
$result = array();
$keys = explode(',', INDEXFORMAT);
if (!strpos($condition, '&&')) {
$conditions = $condition;
}else{
$conditions = explode('&&', $condition);
}
for($k = 0 ; $k < count($datas['name']) ; $k++) {
$flag = true;
foreach ($conditions as $subCondition) {
if (!getCompare($k, $subCondition)) {
$flag = false;
break;
}
}
if ($flag) {
$result[] = $k;
} }
return $result;// return keys array in datas
} function getCompare($key, $condition){
global $datas;
if(!preg_match('/[<>=!%]+/', $condition, $operator)){ //$operator[0]
return false;
}
$value = explode($operator[0], $condition);//x>12 => 12($value)
switch ($operator[0]) {
case '>':
return ($datas[$value[0]][$key] > $value[1]);
break;
case '>=':
return ($datas[$value[0]][$key] >= $value[1]);
break;
case '<':
return ($datas[$value[0]][$key] < $value[1]);
break;
case '<=':
return ($datas[$value[0]][$key] <= $value[1]);
break;
case '==':
return ($datas[$value[0]][$key] == $value[1]);
break;
case '<>':
return ($datas[$value[0]][$key] <> $value[1]);
break;
case '!=':
return ($datas[$value[0]][$key] != $value[1]);
break;
case '%':
if(strpos($datas[$value[0]][$key], $value[1]) === false){
return false;
}else{
return true;
}
break;
default:
return false;
break;
}
}
注:$data数组格式为
---------- PHP Debugger ----------
Array
(
[name] => Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
[dir] => Array
(
[0] => F
[1] => E
[2] => D
[3] => C
[4] => B
[5] => A
)
[time] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
)
PHP——自定义比较算法的更多相关文章
- Wince/VC高效PNG贴图,自定义Alpha算法
工作中,做一些炫点的界面都需要用到PNG图片,Wince里面微软也提供了PNG图片的支持,不过Alpha的混合速度比较慢,所以自己实现了一个Alpha的混合运算接口,经过测试,要比微软AlphaBle ...
- 基于Elasticsearch的自定义评分算法扩展
实现思路: 重写评分方法,调整计算文档得分的过程,然后根据function_score或script_sort进行排序检索. 实现步骤: 1.新建java项目TestProject,引入Elast ...
- GuavaCache学习笔记一:自定义LRU算法的缓存实现
前言 今天在看GuavaCache缓存相关的源码,这里想到先自己手动实现一个LRU算法.于是乎便想到LinkedHashMap和LinkedList+HashMap, 这里仅仅是作为简单的复习一下. ...
- sort 排序 自定义排序算法的使用
// struct sort_by_pt// {// bool operator()(const std::pair<CString, AcGePoint3d> a, const std: ...
- 自定义简单算法MVC框架
什么是MVC框架 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 它是一种软件设计典范,用一种业务逻辑.数据 ...
- PIE SDK算法的自定义扩展
1.算法功能简介 算法的自定义扩展允许用户自主开发新的算法.自定义的算法必须实现PIE.SystemAlgo.BaseSystemAlgo基础类,这样才能被PIE的算法管理器调用起来. 2.算法功能实 ...
- springcloud ribbon Finchley 版本,自定义算法
引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...
- Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
随机推荐
- 自动化部署之gitlab权限管理--issue管理
一.删除测试项目 先进入项目,选择编辑项目 二.拉取到最下方,移除项目 三 输入你要删除的项目名称 二 创建Group,User,Project 2.1 创建一个组,组名为java Group pat ...
- PhpStorm 中切换PHP版本
PhpStorm 中默认的 PHP 版本是 PHP 5.4 ,PhpStorm 会以该版本对编辑器中的PHP文件进行自动校验.EX:PHP文件中,使用了 PHP 5.4 版本以上的新特性,由于 Php ...
- threeSum问题
三数之和等于0的问题: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中 ...
- 048 hive运行的相关配置
一:执行SQL的方式 1.配置的键值 2.minimal下运行fetch 3.设定hive.fetch.task.conversion=more 4.在more下运行fetch 二:虚拟列 一共三个虚 ...
- java实体转json忽略属性
1: import com.alibaba.fastjson.annotation.JSONField; fastjson 过滤指定字段 @JSONField(serialize=false)priv ...
- moodleform -转载于blfshiye
Form API 表单API 文件夹 1.概述 2.亮点 3.使用方法 4.表单元素 4.1 基本表单元素 4.2 定制表单元素 5.经常使用函数 5.1 add_action_buttons($c ...
- Metasploit AFP爆破模块afp_login
Metasploit AFP爆破模块afp_login AFP是苹果系统支持的文件服务.用户可以使用指定的账户名和密码进行远程文件管理.afp_login是一个AFP认证信息暴力破解模块.它支持对 ...
- 网页图表Highcharts实践教程之认识Highcharts
网页图表Highcharts实践教程之认识Highcharts 认识Highcharts Highcharts是国际知名的一款图表插件.它完全使用Javascript编写实现.其结构清晰,使用简单.开 ...
- supervisor管理进程工具配置
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...
- QT-1-环境搭建QT5.4.1&MinGW4.9.1
1.最近在电脑上尝试了搭建QT的环境,原本准备利用VS2013+QT5.51环境,虽然安装很容易但是部署程序时,我是没能做到部署到其他机器,原因还是DLL搞不定: 2.参考友善之臂的MiniTools ...