PHP中的变量运算符

时间:2010-03-31 10:25:50

标签: php operators

在这个例子中,我如何将方程的结果而不是方程本身作为字符串返回?

$operator = '+';
foreach($resultSet as $item){
    $result = $item[$this->orderField] . $operator . 1;
    echo $result;
}

5 个答案:

答案 0 :(得分:17)

您可以创建包装运算符的函数,或者为了简单起见,只需使用bc扩展名:

$operator = '+';
$operators = array(
  '+' => 'bcadd',
  '-' => 'bcsub',
  '*' => 'bcmul',
  '/' => 'bcdiv'
);

foreach($resultSet as $item){
    $result = call_user_func($operators[$operator], $item[$this->orderField], 1);
    echo $result;
}

答案 1 :(得分:7)

要实现这一目标,您可以使用create_function

$operator = '+';
$func = create_function('$a,$b', "return \$a $operator \$b;");
foreach($resultSet as $item){
    $result = $func($item, 1);
    echo $result;
}

使用lambdas(需要php5.3)

可以实现更清洁的解决方案
$func = function($a, $b) { return $a + $b; };
foreach($resultSet as $item){
    $result = $func($item, 1);
    echo $result;
}

另请参见array_sum,array_reduce

使用array_reduce和lambdas

的高级示例
$ary = array(
    array('foo' => 1, 'bar' => 91),
    array('foo' => 2, 'bar' => 92),
    array('foo' => 3, 'bar' => 93),
    array('foo' => 4, 'bar' => 94),
    array('foo' => 5, 'bar' => 95),
);

$sumOfFoos = array_reduce($ary, 
    function($val, $item) { return $val + $item['foo']; } 
);
$sumOfBars = array_reduce($ary, 
    function($val, $item) { return $val + $item['bar']; } 
);

重点是,而不是'变量运算符'(这在php中是不可能的),你应该使用变量函数(这是可能的,而且更灵活)。

答案 2 :(得分:2)

你可以使用eval(),但这通常是一个坏主意,因为它是一个主要的潜在安全漏洞(小心你不允许访问者运行任意代码!)。

它还可能导致难以维护代码。

答案 3 :(得分:2)

快速回答是eval()。但是,在这个精确的例子中,我只是硬编码可能的操作:

<?php

$operator = '+';
foreach($resultSet as $item){
    switch($operator){
        case '+':
            $result = $item[$this->orderField] + 1;
            break;
    }
    echo $result;
}

?>

答案 4 :(得分:1)

使用PHP的eval函数:http://php.net/manual/en/function.eval.php

$operator = '+';
foreach($resultSet as $item){
    $result = $item[$this->orderField] . $operator . 1;
    eval("\$result = \"$result\";");
    echo $result;
}