$string = "var1 <= 6 && var1 > 0 && var2 >= 4 && var2 < 200";
//creates an array with the key 'name' and 'min OR 'max'
function parseExpression($expression){
$parts = preg_split("|( )+|", $expression,3,PREG_SPLIT_NO_EMPTY);
$result = array('name'=>$parts[0]);
switch ($parts[1]){
case '
$parts[2]-=1;
//NO BREAK
case '<=':
$result['max'] = $parts[2];
break;
case '>':
$parts[2]+=1;
//NO BREAK >x same as >=(x+1)
case '>=':
$result['min'] = $parts[2];
break;
default:
throw new Exception("format not supported");
}
return $result;
}
$expressions = explode("&&", $string);
$vars = array();
foreach ($expressions as $expression){
$parsed = parseExpression($expression);
$name = array_shift($parsed);
foreach ($parsed as $key => $value){
if (array_key_exists($key,$vars[$name])){
switch ($key){
case 'min':
$vars[$name][$key] = min($vars[$name][$key],$value);
break;
case 'max':
$vars[$name][$key] = max($vars[$name][$key],$value);
break;
default:
}
throw new Exception("format not supported");
}
else{
$vars[$name][$key] = $value;
}
}
}
var_dump($vars);
?>