3

データの特定の列で計算を実行できるようにするコードをいくつか書きました。

たとえば、{1}*{2} は、列 1 が列 2 で乗算される結果になります。私ができる必要があるのは、これらの数値を列の実際の値に置き換えることです。

簡単に言えば、括弧内の値を取得できるようにする必要があり、それを $column["括弧からの値"] のように使用して、計算に挿入する値を取得します。

その後、文字列を評価できます。

前もって感謝します

4

2 に答える 2

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 を実行する場合は、短い配列構文とラムダを書き直す必要があります。

于 2013-04-25T08:27:15.273 に答える
1

PHPロックス!!!

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

オンラインデモ

于 2013-04-25T08:39:45.840 に答える