如何从php中的给定字符串中提取条件运算符?

时间:2013-01-22 09:41:03

标签: php regex operators preg-match ereg

我有一个函数调用extractValues()并且有一个带有条件运算符的数组来传递它。我真正需要的是,拆分字符串和运算符。例如:

$arr = array('username='=> 'Alex','id >'=>'4');
extractValues($arr);

我需要拆分$ arr键中可用的运算符和字符串,并存储到两个单独的变量中。记住所有数组键都是动态的。字符串和条件运算符之间可能存在空格,也可能不存在。

数组键中预期的运算符是:

$operators = array('=','!=', '<', '<=', '>', '>=', 'like', 'clike', 'slike', 'not', 'is', 'in', 'between', 'and', 'or');

1 个答案:

答案 0 :(得分:0)

除了其他可能性之外,您还可以使用preg_match()来实现此目的。我不确定我是否理解你的问题,但我已经做好了准备和应该有所帮助的榜样。它将原始数组转换为具有以下结构的数组:

array(
  array('key', 'operator', 'value'),
  array('key', 'operator', 'value'),
  array('key', 'operator', 'value'),
  // ...
)

代码如下:

$arr = array('username='=> 'Alex','id >'=>'4');
$result = extractValues($arr);
var_dump($result);

function extractValues($arr) {
    $pattern  = '/([A-Za-z_]+[A-Za-z_0-9]?)[ ]?(!=|=|<=|<|>=|';
    $pattern .= '>|like|clike|slike|not|is|in|between|and|or)/';

    $result = array();
    foreach($arr as $key => $value) {
        preg_match($pattern, $key, $matches);
        $result []= array($matches[1], $matches[2], $value);
    }

    return $result;
}

输出如下:

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(8) "username"
    [1] =>
    string(1) "="
    [2] =>
    string(4) "Alex"
  }
  [1] =>
  array(3) {
    [0] =>
    string(2) "id"
    [1] =>
    string(1) ">"
    [2] =>
    string(1) "4"
  }
}