我想采用未知长度的和/或逻辑查询查询字符串:
$logic = 'elephants and tigers or dolphins and apes or monkeys and humans and gorillas and and 133322 or 2';
并将其解析为一个数组,我假设它看起来像:
$parsed_to_or = array(
array('elephants', 'tigers'),
array('dolphins', 'apes'),
array('monkeys', 'humans', 'gorillas', '133322'),
array('2')
);
这是我到目前为止所拥有的:
$logic_e = preg_split('/\s+/', $logic);
$or_segments = array();
$and_group = array();
foreach($logic_e as $fragment) {
if (preg_match('/^(and|&&)$/i', $fragment)) {
continue;
} elseif (preg_match('/^(or|\\|\\|)$/i', $fragment)) {
if (count($and_group)>0) {
$or_segments[] = $and_group;
$and_group = array();
} continue;
} else {
$and_group[] = $fragment;
continue;
}
}
if (count($and_group)>0) {
$or_segments[] = $and_group;
$and_group = array();
}
有没有更好的方法来解决这个问题?