PHP——自定义比较算法
2013-12-06 17:24
435 查看
很多时候,程序都是直接写好逻辑运算,提供给用户的是一个值,然后后台去比较;但是有时会提供一种类似计算器一样的交互方式的时候,PHP只能读懂用户的输入来进行比较了~
最近的一个项目涉及到一个由用户自定义输入比较方法,后台取相应数据,自动比较,输出结果。比如:
用户输入: time>9&&time<15
后台执行: 读懂输入,获取数据,进行比较,输出比较的结果
看了需求,完全就是模拟PHP比较运算与数据库操作啊,干吧~~
注:$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
)
)
最近的一个项目涉及到一个由用户自定义输入比较方法,后台取相应数据,自动比较,输出结果。比如:
用户输入: 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遍历指定目录,并存储目录内所有文件属性信息
- php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
- PHP json_encode中文乱码解决方法
- PHP一些文章
- 23种PHP开发工具集合
- phpcmsv9 后台统计编辑发稿数量
- PHP调试工具PHP DEBUG TOOLS 使用方法
- php中数组自定义排序
- 在PHP语言中使用JSON
- PHP汉字拼音转换和公历农历转换(代码家园)
- php生成GIF动态验证码图片(代码家园)
- FTPHelper-FTP帮助类,常用操作方法
- FTP多任务下载实现类
- PHP学习:字符串操作和正则表达式
- PHP数组学习
- 实现断点续传的FTP下载类(支持多线程多任务下载)
- 在servlet中用outputStream输出数据以及中文数据的问题
- php入门学习
- PHP之OOP要点摘要
- PHP_PDO 调用mysql 带返回参数的存储过程