php 计算字符串值:“2+4+3-12+3-5”

php calculate string values: "2+4+3-12+3-5"

如何计算包含以下数字和 (+/-) 运算符的字符串中的值:

喜欢代码

$string = "3+5+3-7+4-3-1"; 

//result should be = 4

更新: 我正在尝试计算 $array = [1, +, 6, -, 43, +, 10];

我已经转换成字符串:implode("", $array);

$arr_val = array(1, '+', 6, '-', 43, '+', 10);
$total = 0;

if(isset($arr_val[0]) && ($arr_val[0] != '+' || $arr_val[0] != '-'))
    $total = intval($arr_val[0]);

foreach($arr_val AS $key => $val) {
    if($val == '+') {
        if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
            $total = $total + intval($arr_val[$key+1]);
        }
    } else if($val == '-') {
        if(isset($arr_val[$key+1]) && ($arr_val[$key+1] != '+' || $arr_val[$key+1] != '-')) {
            $total = $total - intval($arr_val[$key+1]);
        }
    }
}

echo $total;

也许它会解决您的问题。

你可以使用eval

$string = "3+5+3-7+4-3-1"; 
eval( '$res = (' . $string . ');' );
echo $res;

对于任何类型的数组,如:[1, + , 4, -, 5, , 3, 8, + , 6]

使用自定义 php 辅助函数解决:

function calcArray($arrVal) 
{
    if (count($arrVal) == 1) {
        return reset($arrVal);
    }

    if (is_int($arrVal[1])) {
        $arrVal[0] = $arrVal[0].$arrVal[1];

        unset($arrVal[1]);

        return calcArray(array_values($arrVal)); 
    }

    $emptyValKey = array_search('', $arrVal);

    if ($emptyValKey) {
        $concatVal = $arrVal[$emptyValKey-1].$arrVal[$emptyValKey+1];

        unset($arrVal[$emptyValKey+1]);
        unset($arrVal[$emptyValKey]);

        $arrVal[$emptyValKey-1] = $concatVal;

        return calcArray(array_values($arrVal));
    }

    $total = $arrVal[1] == "+" ? $arrVal[0] + $arrVal[2]:$arrVal[0] - $arrVal[2];

    unset($arrVal[0]);
    unset($arrVal[1]);
    unset($arrVal[2]);

    array_unshift($arrVal, $total);

    $arrVal = array_values(array_filter($arrVal));

    return calcArray($arrVal);
}