PHP - String Logic Parsing - "X AND Y OR Z" -


i take and/or logic query query string of unknown length:

$logic = 'elephants , tigers or dolphins , apes or monkeys , humans , gorillas , and 133322 or 2'; 

and parse array, assume like:

$parsed_to_or = array(   array('elephants', 'tigers'),   array('dolphins', 'apes'),   array('monkeys', 'humans', 'gorillas', '133322'),   array('2')  ); 

this have far:

 $logic_e = preg_split('/\s+/', $logic);   $or_segments = array();  $and_group = array();    foreach($logic_e $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();  } 

any better ways tackle this?

update: added ability use && , || anywhere

you can following:

<?php  $logic = 'elephants && tigers || dolphins && apes || monkeys , humans , gorillas , && 133322 or 2';  $result = array(); foreach (preg_split('/ (or|\|\|) /', $logic) $parts) {   $bits = preg_split('/ (and|&&) /', $parts);   ($x=0; $x<count($bits); $x++) {     $bits[$x] = preg_replace('/\s?(and|&&)\s?/', '', $bits[$x]);   }   $result[] = $bits; }  echo '<pre>'; var_dump($result); 

which result in following:

array(4) {   [0]=>   array(2) {     [0]=>     string(9) "elephants"     [1]=>     string(6) "tigers"   }   [1]=>   array(2) {     [0]=>     string(8) "dolphins"     [1]=>     string(4) "apes"   }   [2]=>   array(4) {     [0]=>     string(7) "monkeys"     [1]=>     string(6) "humans"     [2]=>     string(8) "gorillas"     [3]=>     string(6) "133322"   }   [3]=>   array(1) {     [0]=>     string(1) "2"   } } 

Comments

Popular posts from this blog

java - Jmockit String final length method mocking Issue -

asp.net - Razor Page Hosted on IIS 6 Fails Every Morning -

c++ - wxwidget compiling on windows command prompt -