Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用列数据替换括号内的字符串_Php_Regex_Preg Replace Callback - Fatal编程技术网

Php 用列数据替换括号内的字符串

Php 用列数据替换括号内的字符串,php,regex,preg-replace-callback,Php,Regex,Preg Replace Callback,我已经编写了一些代码,允许对特定的数据列进行计算 例如{1}*{2}将导致第1列乘以第2列。我需要做的是用列的实际值替换这些数字 简单地说,我需要能够得到括号内的值,然后像$column[“value from branchers”]一样使用它来获得要插入到计算中的值 然后我可以计算字符串 提前感谢像这样的方法应该会奏效: $myString = '{1}*{2}'; $myValues = [1 => '684', 2 => '42']; $myFormula = preg_rep

我已经编写了一些代码,允许对特定的数据列进行计算

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

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

然后我可以计算字符串


提前感谢

像这样的方法应该会奏效:

$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";
当使用未定义的索引时,可能希望给出一个更难的错误,但本质上这需要一些调整

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

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';
    }
}

.

哪里是
{1}*{2}
?就在某个地方?还有,你尝试过什么吗?你最好是在上面分割输入,而不是{}这样你就可以用1,*,2来分解(“,”,$input),然后你可以简单地通过结果数组对每一个进行分解,并使用{}引用你的列,比如$column[$array[0]],我想你必须对它进行正则化