3v4l.org

run code in 300+ PHP versions simultaneously
<?php function evalRPN($input) { $_GET['a']=$input; $v=$_GET['a']; while(preg_match('~(.*?)(-?[\d.]+) +(-?[\d.]+) +([*/+-])(.*)~',$v,$m)) $v=$m[1].($m[4]=="+"?$m[2]+$m[3]:($m[4]=="-"?$m[2]-$m[3]:($m[4]=="*"?$m[2]*$m[3]:$m[2]/$m[3]))).$m[5]; return $v; } function evalRPN2($input) { $_GET['a']=$input; $v=$_GET['a']; do{$v=preg_replace_callback( '~(-?[\d.]+) +(-?[\d.]+) +([*/+-])~', fn($m)=>($m[3]=="+"?$m[1]+$m[2]:($m[3]=="-"?$m[1]-$m[2]:($m[3]=="*"?$m[1]*$m[2]:$m[1]/$m[2]))), $v,9,$c );}while($c); return $v; } function evalRPN3($input) { $_GET['a']=$input; foreach(preg_split('~ +~', $_GET['a'])as$v) if(floatval($v))$s[]=$v;else{[$e,$d]=array_splice($s, -2);$s[]=$v=="+"?$e+$d:($v=="-"?$e-$d:($v=="*"?$e*$d:$e/$d));} return $s[0]; } echo evalRPN('-4 5 +') , "\n"; // output 1 echo evalRPN('5 2 /') , "\n"; // output 2.5 echo evalRPN('5 2.5 /') , "\n"; // output 2 echo evalRPN('5 1 2 + 4 * 3 - +') , "\n"; // output 14 echo evalRPN('4 2 5 * + 1 3 2 * + /') , "\n"; // output 2 echo evalRPN2('-4 5 +') , "\n"; // output 1 echo evalRPN2('5 2 /') , "\n"; // output 2.5 echo evalRPN2('5 2.5 /') , "\n"; // output 2 echo evalRPN2('5 1 2 + 4 * 3 - +') , "\n"; // output 14 echo evalRPN2('4 2 5 * + 1 3 2 * + /') , "\n"; // output 2 echo evalRPN3('-4 5 +') , "\n"; // output 1 echo evalRPN3('5 2 /') , "\n"; // output 2.5 echo evalRPN3('5 2.5 /') , "\n"; // output 2 echo evalRPN3('5 1 2 + 4 * 3 - +') , "\n"; // output 14 echo evalRPN3('4 2 5 * + 1 3 2 * + /') , "\n"; // output 2

preferences:
55.89 ms | 402 KiB | 5 Q