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 ...
随机推荐
- day8--socketserver作业
fileno()文件描述符 handle_request()处理单个请求 server_forever(poll_interval=0.5)处理多个请求,poll_interval每0.5秒检测是否关 ...
- python全栈开发day14--内置函数和匿名函数
- asp.net core日志组件
日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置文件中的.因为之前介绍配置文件的时候我 ...
- 051 日志案例分析(PV,UV),以及动态分区
1.实现的流程 需求分析 时间:日,时段 分区表:两级 PV UV 数据清洗 2015-08-28 18:19:10 字段:id,url,guid,tracktime 数据分析 导出 2.新建源数据库 ...
- HDU1575-Tr 【矩阵快速幂】(模板题)
<题目链接> 题目大意: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第 ...
- SSL/TLS中间人攻击
准备:kali.xp kali ip:192.168.14.157 目标ip:192.168.14.158 目标网关:192.168.14.2 使用工具:ettercap.sslstrip.arpsp ...
- DB安装
start from the execute file : DB2_ESE_10_Win_x86-64\setup.exe Navigator to "Install a Product&q ...
- 潭州课堂25班:Ph201805201 第十四课 异常,处理 (课堂笔记)
程序难免会出现错误 : 语法错误 : 逻辑错误: AttributeError -->> 试图访问一个对象没有的属性, IOError ---->> 输入输出异常 In ...
- Android native thread相关
几个主要的source code路径: /system/core/include/utils/threads.h /system/core/include/utils/Thread.h /system ...
- unity小知识了解
在搜索栏的右侧有三个按钮,单击第一个按钮,弹出相应菜单,可以根据目标类型过滤搜索结果.[按钮从左到右] 第二个按钮,提供素材标签来过滤搜索结果,可以自定义标签. 第三个按钮,提供了将搜索结果添加到前面 ...