Say I have a string, $char. $char == "*".
I also have two variables, $a and $b, which equal "4" and "5" respectively.
How do I get the result of $a $char $b, ie 4 * 5 ?
Thanks :)
Say I have a string, $char. $char == "*".
I also have two variables, $a and $b, which equal "4" and "5" respectively.
How do I get the result of $a $char $b, ie 4 * 5 ?
Thanks :)
 
    
     
    
    You can use eval() as suggested by @konforce, however the safest route would be something like:
$left = (int)$a;
$right = (int)$b;
$result = 0;
switch($char){
  case "*":
    $result = $left * $right;
    break;
 case "+";
   $result = $left + $right;
   break;
// etc
}
 
    
    safest method is a switch construct:
function my_operator($a, $b, $char) {
    switch($char) {
        case '=': return $a = $b;
        case '*': return $a * $b;
        case '+': return $a + $b;
        etc...
    }
}
 
    
    The easiest but most dangerous method is to use eval.
$c = eval("return $a $char $b;");
 
    
    Another way to avoid creating a switch/case, could be:
<?php 
// Doesn't matter if $a and $b are integers or strings
$a = 100;
$b = 1000;
$operator = ">";
$operations = [
  '='  => $a == $b,
  '>'  => $a > $b,
  '>=' => $a >= $b,
  '<'  => $a < $b,
  '<=' => $a <= $b,
  '<>' => $a <> $b,
];
// It will get the value of $a > $b and the result will be false
$operations[$operator]
?>
Finally if you prefer, you can move the $operations array, to a function to improve the readability code.
<?php 
// Doesn't matter if $a and $b are integers or strings
$a = 100;
$b = 1000;
$operator = ">";
// It will get the value of $a > $b and the result will be false
$result = getOperationResult($a, $b, $operator);
function getOperationResult(string|int $a, string|int $b, string $operator): bool
{
    $operations = [
      '='  => $a == $b,
      '>'  => $a > $b,
      '>=' => $a >= $b,
      '<'  => $a < $b,
      '<=' => $a <= $b,
      '<>' => $a <> $b,
    ];
    return $operations[$operator];
}
?>
 
    
    take a look at the eval() function. you will need to build a proper php command and run inside the eval() to extract out the result.
 
    
    You can do with eval however I would not suggest using eval.
If there is case operator can by anything you should check what operator is before using
switch($char)
{
  case '*':
    $result= $a * $b;
    break;
  case '+':
    $result= $a + $b;
    break;
}
 
    
    <?php
$a = 'alex';
$b = "alex";
$c = "==";
function abc($a,$b,$c){
  $d = 'return ($a '.$c.' $b) ? true : false;';
  return eval($d);
}
if(abc($a,$b,$c)){
  echo "condition true";
}else{
  echo "condition false";
}
// echo $e;
?>