2013-04-25 26 views
3

我已经编写了一些代码来允许在特定数据列上进行计算。用列数据括号替换字符串

例如{1} * {2}会导致第1列乘以第2列。我需要做的是将这些数字替换为列的实际值。

简单地说,我需要能够得到括号内的值,然后像$ column [“括号内的值”]那样使用它来获取要插入计算的值。

然后我可以评估字符串。

在此先感谢

+0

“{1} * {2}”在哪里?只是在某个字符串中?另外,你有尝试过什么吗? – Nick 2013-04-25 08:21:40

+0

您最好将输入分割开来,而不是像{}那样用输入为1,*,2的方式来爆炸(“,”,$ input),然后您可以简单地通过结果数组,使用{}引用你的列像$ column [$ array [0]],你将不得不正则表达它我认为 – Dave 2013-04-25 08:23:03

回答

3

像这样的东西应该工作:

$myString = '{1}*{2}'; 
$myValues = [1 => '684', 2 => '42']; 
$myFormula = preg_replace_callback('{([0-9]+)}', function($match) use ($myValues) { 
    return $myValues[$match] ?: 'undefined'; 
}, $myString); 
echo "Resulting formula: $myFormula"; 

可能想给一个更难错误时使用一个未定义的指标,但本质上这应该与一些调整工作。

此外,如果您运行比5.4更旧的PHP版本,则需要重写短阵列语法和lambda。

1

PHP Rocks !!!

$string = 'blabla bla I want this to be done !!! {10} + {12} Ah the result is awesome but let\'s try something else {32} * {54}'; 

// Requires PHP 5.3+ 
$string = preg_replace_callback('/\{(\d+(\.\d+)?)\}\s*([\+\*\/-])\s*\{(\d+(\.\d+)?)\}/', function($m){ 
return mathOp($m[3], $m[1], $m[4]); 
}, $string); 

echo $string; // blabla bla I want this to be done !!! 22 Ah the result is awesome but let's try something else 1728 

// function from: http://stackoverflow.com/a/15434232 
function mathOp($operator, $n1, $n2){ 
    if(!is_numeric($n1) || !is_numeric($n2)){ 
     return 'Error: You must use numbers'; 
    } 
    switch($operator){ 
     case '+': 
      return($n1 + $n2); 
     case '-': 
      return($n1 - $n2); 
     case '*': 
      return($n1 * $n2); 
     case '/': 
      if($n2 == 0){ 
       return 'Error: Division by zero'; 
      }else{ 
       return($n1/$n2); 
      } 
     default: 
      return 'Unknown Operator detected'; 
    } 
} 

Online demo

相关问题