1

文字列を簡単に変換できますか

"4 | 2"

標準のビットごとの比較に変換されるため、6 が返されます。

このようなことを達成できるように

$var1 = "4 | 2";
if(evalAsBitwise($var1) & 2) {
    return true;
} else {
    return false;
} 
4

2 に答える 2

1

区切り文字としてスペースを使用して文字列を分割すると、最初の数値、演算子、および2番目の数値の3つの部分が得られます。関数では、switchを使用して、使用する演算子を決定できます。

何かのようなもの

function evalAsBitwise($input) {      

   $parms = explode(" ", $input);       
   $next;
   $op;

   $total = array_shift($parms);

   while (!empty($parms)) {
     $next = array_shift($parms);
     if(is_numeric($next)) {
        switch($op) {
          case "|": $total = $total | intval($next); break;
          case "&": ...
        }
     }
     else {
       $op = $next;
     } 
   }// End while
   return $total;
}

また、〜をテストする必要があります。ただし、(a&b ^(c ^ d))のようなより複雑な式を実行する必要がある場合は、さらに複雑になります。

于 2012-11-02T04:51:31.500 に答える
0

これを試して。ビットごとの OR でのみ機能します。

function evalAsBitwise($var) {
    $values = explode($var);
    $result = 0;
    foreach ($$values as &$value) {
        $value = trim($value);
        $result = intVal($value) | intVal($result);
    }
    return $result;
}

私のphpスキルは少し錆びています。構文エラーを確認してください。

于 2012-11-02T05:13:57.917 に答える