Intereting Posts

Операторы переменных в PHP

Учитывая этот пример, как бы вернуть результат уравнения, а не само уравнение в виде строки?

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

Solutions Collecting From Web of "Операторы переменных в PHP"

Вы можете создавать функции, которые обертывают операторы, или для простоты просто используйте расширение bc :

 $operator = '+'; $operators = array( '+' => 'bcadd', '-' => 'bcsub', '*' => 'bcmul', '/' => 'bcdiv' ); foreach($resultSet as $item){ $result = call_user_func($operators[$operator], $item[$this->orderField], 1); echo $result; } 

Чтобы достичь именно этого, вы можете использовать create_function

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

Чистое решение возможно с лямбдами (требуется 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), вы должны скорее использовать переменные функции (что возможно и гораздо более гибкое).

Вы можете использовать eval() , но это, как правило, плохая идея, так как это серьезное потенциальное ядро ​​безопасности (будьте осторожны, вы не позволяете посетителям запускать произвольный код!).

Это также может привести к сложному поддержанию кода.

Быстрый ответ – eval (). Однако в этом точном примере я бы просто скорректировал возможные операции:

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

Используйте функцию eval для PHP: http://php.net/manual/en/function.eval.php

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