3v4l.org

run code in 300+ PHP versions simultaneously
<?php function parseSearchTerms($queryStr) { $searchTerms = [ 'canHave' => [], 'mustHave' => [], 'cannotHave' => [] ]; $keyword = ''; $quoted = false; $mod = null; $escaped = false; $spaced = true; for($i=0,$l=strlen($queryStr);$i<$l;$i++) { $char = $queryStr[$i]; if(ctype_space($char)) { $char = ' '; } switch($char) { case ' ': if($quoted || !$spaced) { $keyword .= $char; $spaced = true; } else if(!$quoted && !empty($keyword)) { if(is_null($mod)) { $searchTerms['canHave'][] = $keyword; } else { if($mod == '+') { $searchTerms['mustHave'][] = $keyword; } else if($mod == '-') { $searchTerms['cannotHave'][] = $keyword; } } $keyword = ''; } break; case '"': if(!$escaped) { if($quoted) { if(is_null($mod)) { $searchTerms['canHave'][] = $keyword; } else { if($mod == '+') { $searchTerms['mustHave'][] = $keyword; } else if($mod == '-') { $searchTerms['cannotHave'][] = $keyword; } } $keyword = ''; $quoted = false; } } break; case '+': case '-': if($spaced) { $mod = $char; $spaced = false; } else { $mod = null; $keyword .= $char; $spaced = false; } break; default: $keyword .= $char; $spaced = false; break; } } if(!is_null($mod)) { if($mod == '+') { $searchTerms['mustHave'][] = $keyword; } else if($mod == '-') { $searchTerms['cannotHave'][] = $keyword; } } return $searchTerms; } var_dump(parseSearchTerms('+here are -no some "search terms"'));
Output for 5.6.0 - 5.6.38, 7.0.0 - 7.0.33, 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
array(3) { ["canHave"]=> array(0) { } ["mustHave"]=> array(0) { } ["cannotHave"]=> array(1) { [0]=> string(29) "here are no some search terms" } }
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 array(3) { ["canHave"]=> array(0) { } ["mustHave"]=> array(0) { } ["cannotHave"]=> array(1) { [0]=> string(29) "here are no some search terms" } }

preferences:
207.47 ms | 402 KiB | 255 Q